এই সমস্যায়, আমাদের N এবং K দুটি পূর্ণসংখ্যা দেওয়া হয়েছে। আমাদের কাজ হল K th -এর সূচক খুঁজে বের করা। ডান থেকে গণনা করা N সংখ্যাটির কিছুটা সেট করুন।
সংখ্যার বাইনারি উপস্থাপনা থেকে সেট বিটগুলি পরীক্ষা করা হয়। বাইনারি উপস্থাপনায় ইন্ডেক্সিং ডান দিক থেকে সূচক 0 থেকে শুরু হয় এবং বাম দিকে প্রচারিত হয়।
উদাহরণ − বাইনারি সংখ্যা '011101'-এ, ডান দিক থেকে 0 সূচকে আমাদের 1 আছে, সূচক 1 এ ডান থেকে আমাদের 0 আছে, ইত্যাদি।
এখন, সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক
ইনপুট − N =6, K =2
আউটপুট − 2
ব্যাখ্যা − 6-এর বাইনারি উপস্থাপনা হল 0110৷ ডান দিক থেকে 2য় সেট বিটটি সূচক 2 এ থাকবে৷
এই সমস্যাটি সমাধান করার জন্য, বর্তমান বিট সেট করা আছে কিনা তা আমাদের পরীক্ষা করতে হবে, যদি এটি হয় তবে আমরা K এর মান হ্রাস করব। প্রতিটি চেকের পরে, আমরা bt 1 নম্বরটি স্থানান্তর করব, এটি পরবর্তী বিট দেবে, এছাড়াও আমরা করা শিফটের সংখ্যা বজায় রাখবে। K-এর মান 0 হয়ে গেলে, আমরা শিফটের গণনা প্রিন্ট করব।
উদাহরণ
আমাদের যুক্তির বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম
#include <iostream> using namespace std; int FindIndexKthBit(int N, int K) { int index=0; while (N) { if (N & 1) K--; if (!K) return index; index++; N = N >> 1; } return -1; } int main() { int N = 12, K = 2; cout<<"The "<<K<<"th set bit of the number "<<N<<" is at index : \t"; int index = FindIndexKthBit(N, K); if (index!=-1) cout<<index; else cout<<"\nsorry no index found"; return 0; }
আউটপুট
The 2th set bit of the number 12 is at index : 3