2017-05-29 6 views
0

Grundlegend dieses Programm nimmt eine Dezimalzahl von 1 bis 10, das ist der Potenzindex von 2. Und verwandelt sich in ein Array mit 2^n Kombinationen. Zum Beispiel: Wenn meine Nummer 1 ist, habe ich zwei Arrays, [0] und [1], und wenn meine Dezimalzahl 2 ist, habe ich 4 Kombinationen, [0 0]; [0 1]; [1 0]; [1 1]. Und so weiter.Gibt es eine bessere Möglichkeit, das Programm unten zu optimieren?

#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

Bitte beachten Sie dies auf [codereview.se]. – Filburt

+4

Ich stimme für das Schließen dieser Frage als Off-Topic, weil dies besser für Code Review SE geeignet ist! –

+0

Ich poste es auf Code Review. Neu hier, wusste nicht, dass es eine solche Webseite gab. Tnks –

Antwort

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

Gibt es eine Möglichkeit, es ohne bitweise Operatoren zu schreiben? Weil ich es noch nicht gelernt habe. –

+0

@IgorBraga Zum Beispiel c = vet [i] & carry; vet [i]^= tragen; '->' c = vet [i] && tragen; vet [i] = vet [i]! = tragen; ' – BLUEPIXY

+0

Was ist mit' q << = n', ist das auch ein bitweiser Operator? –

Verwandte Themen