ในปัญหานี้ เราได้รับสองจำนวนเต็ม N และ K หน้าที่ของเราคือค้นหาดัชนีของ K th กำหนดเลข N เล็กน้อย นับจากขวา
ชุดบิตจะถูกตรวจสอบจากการแทนค่าไบนารีของตัวเลข การทำดัชนีในรูปแบบไบนารีเริ่มต้นจากดัชนี 0 จากทิศทางที่ถูกต้องและแพร่กระจายไปทางซ้าย
ตัวอย่าง - ในเลขฐานสอง '0111101' ที่ดัชนี 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