इस समस्या में, हमें दो पूर्णांक N और K दिए गए हैं। हमारा कार्य K th का सूचकांक ज्ञात करना है। संख्या N का थोड़ा सा सेट करें, दाईं ओर से गिना जाए।
संख्या के द्विआधारी प्रतिनिधित्व से सेट बिट्स की जाँच की जाती है। बाइनरी प्रतिनिधित्व में इंडेक्सिंग इंडेक्स 0 से दाएं दिशा से शुरू होती है और बाईं ओर फैलती है।
उदाहरण - बाइनरी नंबर '011101' में, इंडेक्स 0 पर दाईं ओर से हमारे पास 1 है, इंडेक्स 1 पर दाईं ओर से 0 है, और इसी तरह।
अब, समस्या को समझने के लिए एक उदाहरण लेते हैं
इनपुट - एन =6, के =2
आउटपुट -2
स्पष्टीकरण - 6 का बाइनरी प्रतिनिधित्व 0110 है। दाईं ओर से दूसरा सेट बिट इंडेक्स 2 पर होगा।
इस समस्या को हल करने के लिए, हमें यह जांचना होगा कि क्या वर्तमान बिट सेट है, यदि ऐसा है तो हम K के मान को कम कर देंगे। प्रत्येक चेक के बाद, हम संख्या बीटी 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