添削お願いします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
駆け出しのプログラマ

添削お願いします

#1

投稿記事 by 駆け出しのプログラマ » 5ヶ月前

とある数nを入力した時に2^n個分の2進数の全通りを表示するプログラムを考えているのですが、うまくいきません。例えばn=3を入力すると110などが表示されず、7通りしか出力されません。

宜しくお願い致します。

コード:


#include <stdio.h>
#include <stdlib.h>


void aa(int x,int y)
{
int i;

for(i=0;i<y;i++)
printf(x & (1<<(y-i-1))?"1":"0");
printf("\n");

}

int main(int argc,char *argv[])
{
int i,j,h;
int t=0;

printf("自然数を入力してください\n");
setbuf(stdout, NULL);
scanf("%d",&h);

aa(t,h);


for(j=0;j<=h;j++){

for(i=j;i<h;i++)
aa(t|(1<<i),h);
t<<=1;
t|=1;
}
return 0;
}

 

アバター
みけCAT
記事: 6425
登録日時: 10年前
住所: 千葉県
連絡を取る:

Re: 添削お願いします

#2

投稿記事 by みけCAT » 5ヶ月前

0と、「下位から連続したjビットと、他に1ビット」だけが1の数のみを出力するようになっているのに対し、
110は下位0ビットと他に2ビットが1なので、出力されないですね。
どのような出力が欲しいのかわかりませんが、素直にこれではいけないのでしょうか?

コード:

for(i=0;i<(1<<h);i++){
    aa(i,h);
}
また、コードはインデントをして構造をわかりやすくした方がいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

みけcat様

Re: 添削お願いします

#3

投稿記事 by みけcat様 » 5ヶ月前

変に考えすぎてました、、、、

確かにみけcat様の方法で出力できました!

ありがとうございました!!

返信

“C言語何でも質問掲示板” へ戻る