如何使用java / c
打印特定二进制数的所有可能组合而不重复值例如:
输入:
110011111
输出:
100111111
111110011
111001111
111111100
等。
答案 0 :(得分:0)
这是我想到的第一种方式。可能是更好或更有效的方法。
答案 1 :(得分:0)
对我来说,我会解决它(蛮力),(不是完美的解决方案):http://ideone.com/d37KDK
#include <stdio.h>
void showbits(int n)
{
int i,k,andmask;
for(i=31;i>=0;i--)
{
andmask = 1 << i;
k = n & andmask;
k == 0 ? printf("0") : printf("1");
}
printf("\n");
}
int numberOfOnes (int num) {
int count = 0;
unsigned int u = (unsigned int)num;
while (u != 0) {
if ((u&1) == 1)
count++;
u >>= 1;
}
return count;
}
int main()
{
int n = 0b110011111;
int n_num_of_ones = numberOfOnes(n);
int max = 1 << 30;
printf("max=%d\n" , max);
int i;
for(i = 0; i < max ; i++)
if(numberOfOnes(i) == n_num_of_ones)
showbits(i);
return 0;
}