给定数字N和K ,检查N的二进制表示形式的所有设置位是否至少相距K个位置的任务。
例子:
Input: N = 5, K = 1
Output: YES
Explanation:
Binary of 5 is 101.
The 1's are 1 place far from each other.
Input: N = 10, K = 2
Output: NO
Explanation:
Binary of 10 is 1010.
The 1's are not at least 2 places far from each other.
方法:
- 遍历N的二进制表示形式中的所有位,并保持变量’count’初始化为0。
- 每当找到设置的位(1)时,请检查count <=K。如果不返回false。
- 如果找到未设置的位(0),则将count的值增加1。
下面是上述方法的实现。
C++
// C++ program to check if all the set
// bits of the binary representation
// of N are at least K places away.
#include
using namespace std;
bool CheckBits(int N, int K)
{
// Initialize check and count
// with 0
int check = 0;
int count = 0;
for (int i = 31; i >= 0; i--)
{
// The i-th bit is a set bit
if ((1 << i) & N)
{
// This is the first set bit so,
// start calculating all the
// distances between consecutive
// bits from here
if (check == 0)
{
check = 1;
}
else
{
// If count is less than K
// return false
if (count < K)
{
return false;
}
}
count = 0;
}
else
{
// Adding the count as the
// number of zeroes increase
// between set bits
count++;
}
}
return true;
}
// Driver code
int main()
{
int N = 5;
int K = 1;
if(CheckBits(N, K))
{
cout << "YES";
}
else
{
cout << "NO";
}
return 0;
}
Java
// Java program to check if all the set
// bits of the binary representation
// of N are at least K places away.
import java.util.*;
class GFG{
static boolean CheckBits(int N, int K)
{
// Initialize check and count
// with 0
int check = 0;
int count = 0;
for(int i = 31; i >= 0; i--)
{
// The i-th bit is a set bit
if (((1 << i) & N) > 0)
{
// This is the first set bit so,
// start calculating all the
// distances between consecutive
// bits from here
if (check == 0)
{
check = 1;
}
else
{
// If count is less than K
// return false
if (count < K)
{
return false;
}
}
count = 0;
}
else
{
// Adding the count as the
// number of zeroes increase
// between set bits
count++;
}
}
return true;
}
// Driver code
public static void main(String[] args)
{
int N = 5;
int K = 1;
if (CheckBits(N, K))
{
System.out.print("YES");
}
else
{
System.out.print("NO");
}
}
}
// This code is contributed by shikhasingrajput
Python3
# Python3 program to check if all the set
# bits of the binary representation
# of N are at least K places away.
def CheckBits(N, K):
# Initialize check and count
# with 0
check = 0
count = 0
for i in range(31, -1, -1):
# The i-th bit is a set bit
if ((1 << i) & N):
# This is the first set bit so,
# start calculating all the
# distances between consecutive
# bits from here
if (check == 0):
check = 1
else:
# If count is less than K
# return false
if (count < K):
return False
count = 0
else:
# Adding the count as the
# number of zeroes increase
# between set bits
count += 1
return True
# Driver code
if __name__ == "__main__":
N = 5
K = 1
if (CheckBits(N, K)):
print("YES")
else:
print("NO")
# This code is contributed by chitranayal
Javascript
输出:
YES