プロが教える店舗&オフィスのセキュリティ対策術

一次元配列でパスカルの三角形を表示したいのですがうまくいきません。三角形の左上と右上をうまく足すことが出来ません。教えてください。作ってみたプログラムを載せます。
int comb[N+1];
int i,j,a;
int main (){
for(i=0;i<=N;i++){
comb[i]=0;
}
for(i=0;i<=N;i++){
for(j=0;j<=i;j++){

if(j==0||j==i){
comb[j]=1;

}else{

comb[j]=comb[j]+comb[j-1];


}

}
printf("\n");
}

A 回答 (3件)

1行の計算を前(0~)から行なうと前回値(comb[j-1])が上書きされている為、結果が可笑しくなります。


1行の計算を後ろ(i~)から行なうと前回値が上書きされない為上手く行きます。
結果表示は後ろからになりますが、1行の計算値は対象なので見た目は同じです。

この回答への補足

分かりやすいご回答ありがとうございます。
前からっていうのが頭にあって後ろからって言うのに気付きませんでした。よく考えれば対象ですもんね。
おかげで完成することが出来ました。

補足日時:2009/01/01 23:32
    • good
    • 0

>そもそも一次元配列(直線上)で実装しようとすることに


>無理がありませんか?

これは工夫次第でできそうですね。ところで、

>printf("%3d\n");

この文で何を出力しようとしていますか?

この回答への補足

本当にすみません。
printf("%3d",comb[j]);
の間違いです。
Nを5としてこのプログラムを実行すると
1
1 1
1 2 1
1 3 4 1
1 4 8 9 1
1 5 13 22 23 1
となります。

補足日時:2009/01/01 21:37
    • good
    • 0

>一次元配列で



パスカルの三角形は平面上に展開していくので、
そもそも一次元配列(直線上)で実装しようとすることに
無理がありませんか?

ところで、お作りになったプログラムには
結果を出力する部分が見あたりません。
そういうコードを提示して「うまくいかない」と言われましても…。

この回答への補足

すみません写しもれでした。
正しくは
int comb[N+1];
int i,j,a;
int main (){
for(i=0;i<=N;i++){
comb[i]=0;
}
for(i=0;i<=N;i++){
for(j=0;j<=i;j++){

if(j==0||j==i){
comb[j]=1;

}else{

comb[j]=comb[j]+comb[j-1];


}
printf("%3d\n");
}
printf("\n");
}
でした。

補足日時:2009/01/01 21:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!