2017-06-01 4 views
-7

私はn(1から10になる)のCプログラムを書くことができます。その結果、0と1の順列があります。 たとえば、n = 2としましょう。私の出力は次のようなものでなければなりません:00; 01; 10; 11。それで、n = 3には8つの可能な順列(000, 001, 010, 100, 101, 110, 011, 111)があります。0と1の順列

私はコードのためのいくつかの制限があります。

  • 私の唯一の可能なライブラリーは、(のmath.hが許可されていない、ことを考えると)stdio.hのです。

  • 継続と中断は許可されません。

  • 各関数には1つの戻り値が必要です。

  • ビット演算子も使用できません。

ありがとうございます。

EDIT:実際、このプログラムはこれよりもはるかに大きく、他のすべての部分を達成しましたが、この部分を解決することはできません。

+1

あなたのコード例はどこですか? – Arijoon

+4

あなたは宿題に全面的に助けを求めています。最低限、あなた自身で試して、助けを求めるためにSOに来る前に、どこに立ち寄っているのかを見てください。 –

+0

「1」と「0」のパターンに注目してください。関連する2進数を '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

_各機能には1つの戻り値が必要です; _ – BLUEPIXY

+1

多分追加方法を理解することができます:P –

関連する問題