2017-05-29 270 views
0

基本上這個程序需要從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

請藉此[codereview.se。 – Filburt

+4

我投票結束這個問題作爲離題,因爲這更適合Code Review SE! –

+0

我會在Code Review上發佈它。新來這裏,不知道有這樣一個網頁。 Tnks –

回答

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; 
     } 
    } 
} 
+0

有沒有辦法寫它沒有按位運算符?因爲我還沒有學習它。 –

+0

@IgorBraga E.g'c = vet [i]&carry; vet [i]^= carry;' - >'c = vet [i] && carry; vet [i] = vet [i]!= carry;' – BLUEPIXY

+0

'q << = n',這也是一個按位運算符嗎? –

相關問題