基本上这个程序采用从1到10的十进制数,即2的幂的索引。并且变成具有2 ^ n个组合的数组。例如:如果我的数字是1,我将有2个数组,[0]和[1],如果我的小数是2,我将有4个组合,[0 0]; [0 1]; [1 0]; [1 1]。等等。
#include <stdio.h>
int main() {
int n, q = 1, i, f, d, p, vet[10];
scanf ("%d", &n);
for (i = 0; i < n; i++){
q *= 2;
}
n--;
for (i = 0; i < q; i++){
f = i;
for (p = 0; p < 10; p++){ //setting array to 0
vet[p] = 0;
}
while ( f > 0){
p = 1;
d = 0;
while (f >= 2*p){
p *= 2;
d++;
}
vet[d] = 1;
f -= p;
}
printf ("f: %d bin:", i);
for (p = 0; p < 10; p++)
printf ("%d", vet[9-p]);
printf ("\n");
}
return 0;
}
答案 0 :(得分:0)
#include <stdio.h>
int main(void) {
int n, q = 1, vet[10] = {0};
scanf("%d", &n);
q <<= n;
for(;;){
for(int i = n-1; i >= 0; --i)
printf("%d", vet[i]);
printf("\n");
if(!--q)
break;
for(int i = 0, carry = 1, c; carry; ++i, carry = c){
c = vet[i] & carry;
vet[i] ^= carry;
}
}
}