2017-06-01 7 views
-7

Wie kann ich ein C-Programm schreiben, wo meine n Nummer gegeben (das von 1 bis 10 geht), ich habe als Ergebnis eine Permutation von 0 und 1 Zum Beispiel lassen Sie uns n = 2 sagen. Meine Ausgabe muss so aussehen: 00; 01; 10; 11. Und so weiter, für n = 3 gibt es 8 mögliche Permutationen (000, 001, 010, 100, 101, 110, 011, 111).Permutationen von 0 und 1

Ich habe einige Einschränkungen für den Code:

  • Meine einzige mögliche Bibliothek ist stdio.h (da ist math.h nicht erlaubt);

  • Weiter und Pause sind nicht erlaubt;

  • Jede Funktion muss eine Rückmeldung haben;

  • Bitweise Operatoren sind ebenfalls nicht erlaubt;

Danke für jetzt.

EDIT: Eigentlich ist das Programm viel größer als das, habe ich alle anderen Teile erreicht, aber ich kann diesen Teil nicht lösen.

+1

wo ist Ihr Codebeispiel? – Arijoon

+4

Sie bitten um Hilfe bei Ihren Hausaufgaben. Auf ein Minimum sollten Sie es selbst ausprobieren und sehen, wo Sie stecken bleiben, bevor Sie nach SO kommen, um Hilfe zu holen. –

+0

Beachten Sie ein Muster mit diesen '1's und' 0's? Sehen Sie, ob Sie binäre Zahlen mit 'n' verknüpfen können. – Miket25

Antwort

1
#include <stdio.h> 

#define PROC_BEGIN \ 
    ++i;            \ 
    for(char bit = '0' ; i != n && bit < '2'; ++bit){\ 
     bits[i] = bit;        \ 
     if(i+1 == n)         \ 
      puts(bits);        \ 
    /**/ 

#define PROC_END \ 
    }   \ 
    --i;   \ 
    /**/ 

int main(void){ 
    char bits[10+1] = {0}; 
    int n, i = -1; 
    scanf("%d", &n); 

    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_BEGIN 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    PROC_END 
    return 0; 
} 
+0

[DEMO] (http://ideone.com/eqSM1A) – BLUEPIXY

+0

das ist hässlich, aber klug –

1

Hier ist meine rekursive Crack bei ihm.

#include <stdio.h> 

void permute_iter(int left, char str[]) 
{ 
    if(left>=0) { 
     str[left] = '0'; 
     permute_iter(left-1, str); 
     str[left] = '1'; 
     permute_iter(left-1, str); 
    } else { 
     puts(str); 
    } 
} 

void permute(int times) 
{ 
    char str[times+1]; 
    str[times] = '\0'; 
    permute_iter(times-1, str); 
} 

int main() 
{ 
    permute(4); 
    return 0; 
} 
+0

_Each Funktion muss eine Rückkehr haben; _ – BLUEPIXY

+1

Vielleicht können Sie herausfinden, wie man hinzufügen: P –