有没有更好的方法来优化下面的程序?

时间:2017-05-29 18:28:43

标签: c

基本上这个程序采用从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;
}

1 个答案:

答案 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;
        }
    }
}