
*/
入力した段数のパスカルの三角形をつくる
*/
#include <stdio.h>
/*---nCr値を返す---*/
int comb(int n,int r)
{
if (r == 0 || r == n)
return (1);
else if (r == 1)
return (n);
else
return (comb(n - 1,r-1) + comb(n - 1,r));
}
int main(void)
{
int ln;
int i,j;
do{
printf(" 段数を入力して下さい:");
scanf("%d",&ln);
}while (ln < 1);
if (r == 0 || r == n)
return (1);
else if (r == 1)
return (n);
else
return (comb(n - 1,r-1) + comb(n - 1,r));
}
int main(void)
{
int ln;
int i,j;
do{
printf(" 段数を入力して下さい:");
scanf("%d",&ln);
}while (ln < 1);
for (i = 0; i < ln; i++){
for(j = 0;j < ln - i;j++)
putchar(' ');
for(j = 0; j < i; j++){
printf("%d",comb(i,j));
printf(" ");
}
putchar('\n');
}
return (0);
}
と作ったら、うまく
1
1 1
1 2 1
1 3 3 1
とは表示されず、
1
1 2
1 3 3
1 4 6 4
となってしまいます。
どこを直せばよいのでしょうか。教えて下さるとうれしいです。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
#1 で正しいはずなので蛇足ですが, こんなふうにすると高速化が期待できるかも:
配列を使って comb の再帰呼出しを減らしたついでに, printf の %*s も使ってみました.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ln;
int i, j;
int *comb;
do {
printf("段数を入れてください:");
scanf("%d", &ln);
} while (ln < 0);
comb = malloc((ln+1) * sizeof comb[0]);
for (i = 0; i <= ln; i++) {
comb[i] = 0;
}
comb[0] = 1;
for (i = 0; i < ln; i++) {
printf("%*s", ln-i, "");
for (j = 0; j <= i; j++) {
printf("%d ", comb[j]);
}
putchar('\n');
for (j = i; j >= 0; j--) {
comb[j+1] += comb[j];
}
}
free(comb);
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
最早開始時間と最遅完了時刻を...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
剰余演算を論理演算と加減算に...
-
signal関数の使い方
-
std::set<int> で、ある値が何...
-
iTRONプログラミング
-
C言語に関する質問です フィボ...
-
C言語の課題です
-
if と配列の組み合わせ
-
C言語 プログラミング
-
次のプログラムを教えてくださ...
-
ファイルに含まれるアルファベ...
-
windows-findstrの正規表現を使...
-
ポストの対応問題
-
「指定されたキャストは有効で...
-
acceptをalarmでタイムアウトさ...
-
「{ } で囲むだけ」は正しい?
-
信頼区間の1.96や1.65ってどこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
return 1L
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
式は定数値が必要です」という...
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
C言語でDxlibを使って3x3の奇数...
-
プログラムについて(UNIX)
-
acceptをalarmでタイムアウトさ...
-
C言語の課題です
-
エラー 添字が付けられた値が、...
-
CStringの配列要素を関数で受け...
-
最早開始時間と最遅完了時刻を...
-
入力された数字を大きい順に並...
おすすめ情報