Learn-c-by-examples-pascals-triangle-program-in-c
提供:Dev Guides
Cでのパスカルの三角形印刷
パスカルの三角形は、工学の学生に教えられる古典的な例の1つです。 多くの解釈があります。 有名なものの1つは、二項方程式での使用です。
三角形の外側のすべての値はゼロ(0)と見なされます。 最初の行は0 1 0ですが、パスカルの三角形のスペースを取得するのは1つだけで、0は表示されません。 2行目は、(0 + 1)と(1 + 0)を追加して取得されます。 出力は2つのゼロで挟まれています。 このプロセスは、必要なレベルに達するまで続きます。
パスカルの三角形は、二項定理を使用して導出できます。 これを実現するために、組み合わせと階乗を使用できます。
アルゴリズム
私たちが階乗をよく知っていると仮定して、ステップバイステップ方式でパスカル三角形を描くというコアコンセプトを見ていきます-
START
Step 1 - Take number of rows to be printed, n.
Step 2 - Make outer iteration I for n times to print rows
Step 3 - Make inner iteration for J to (N - 1)
Step 4 - Print single blank space " "
Step 5 - Close inner loop
Step 6 - Make inner iteration for J to I
Step 7 - Print nCr of I and J
Step 8 - Close inner loop
Step 9 - Print NEWLINE character after each inner iteration
Step 10 - Return
STOP
疑似コード
次のように、上記のアルゴリズムの擬似コードを導出できます-
procedure pascals_triangle
FOR I = 0 to N DO
FOR J = 0 to N-1 DO
PRINT " "
END FOR
FOR J = 0 to I DO
PRINT nCr(i,j)
END FOR
PRINT NEWLINE
END FOR
end procedure
実装
このプログラムを完全に実装しましょう。 階乗(非再帰)およびncr(組み合わせ)の関数を実装します。
#include <stdio.h>
int factorial(int n) {
int f;
for(f = 1; n > 1; n--)
f *= n;
return f;
}
int ncr(int n,int r) {
return factorial(n)/( factorial(n-r) * factorial(r) );
}
int main() {
int n, i, j;
n = 5;
for(i = 0; i <= n; i++) {
for(j = 0; j <= n-i; j++)
printf(" ");
for(j = 0; j <= i; j++)
printf(" %3d", ncr(i, j));
printf("\n");
}
return 0;
}
出力は次のようになります-
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1