এই সমস্যায়, আমাদের 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