2017-05-29 13 views
0

基本的に、このプログラムは1から10までの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

コードレビューSEの方が適しているため、この質問を議論の対象外としています。 –

+0

コードレビューに投稿します。ここに新しい、そのようなWebページがあったのか分からなかった。 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 Eg 'c = vet [i]&carry; vet [i]^=キャリー; - > 'c = vet [i] &&キャリー; vet [i] = vet [i]!= carry; ' – BLUEPIXY

+0

' q << = n'については、これもビット演算子ですか? –

関連する問題