2017-06-01 123 views
-7

如何編寫一個C程序,其中給定了我的n數字(從1到10),結果是0和1的排列組合。 例如,假設n = 2。我的輸出必須是這樣的:00; 01; 10; 11。依此類推,對於n = 3將會有8個可能的排列組合(000, 001, 010, 100, 101, 110, 011, 111)0和1的排列

我對代碼有一些限制:

  • 我只能庫stdio.h中(考慮到,math.h中是不允許的);

  • 繼續和休息是不允許的;

  • 每個函數都必須有一個返回;

  • 按位運算符也是不允許的;

謝謝你。

編輯:其實,程序比這個大很多,我已經實現了所有其他部分,但我無法解決這部分。

+1

你的代碼示例在哪裏? – Arijoon

+4

你完全要求你的功課幫助。至少,你應該自己嘗試一下,看看你在到達SO之前卡住的地方尋求幫助。 –

+0

注意那些'1'和'0'的模式?看看你是否可以將二進制數字與'n'相關聯。 – Miket25

回答

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

這是難看但聰明 –

1

這是我的遞歸破解。

#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

_每個函數必須有一個返回; _ – BLUEPIXY

+1

也許你可以找出如何添加一個:P –