이 문제에서 두 개의 정수 N과 K가 주어졌습니다. 우리의 임무는 K 번째 의 인덱스를 찾는 것입니다. 오른쪽에서 세어 숫자 N의 비트를 설정합니다.
세트 비트는 숫자의 이진 표현에서 확인됩니다. 이진 표현의 인덱싱은 오른쪽 방향에서 인덱스 0부터 시작하여 왼쪽으로 전파됩니다.
예 − 이진수 '011101'에서 오른쪽에서 인덱스 0에는 1이 있고 오른쪽에서 인덱스 1에는 0이 있는 식입니다.
이제 문제를 이해하기 위해 예를 들어보겠습니다.
입력 - N =6, K =2
출력 - 2
설명 − 6의 이진 표현은 0110입니다. 오른쪽에서 두 번째 세트 비트는 인덱스 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