C言語でパスカルの三角形の形に整数を出力する方法
パスカルの三角形とは、整数を三角形の形に配置して表現したものです。その中でも有名なのが二項定理との関連で、組み合わせや階乗の計算を利用して三角形を構成することができます。
パスカルの三角形の構成方法
三角形の外側にある値はすべてゼロ(0)として扱われます。最初の行は「0 1 0」ですが、パスカルの三角形では1だけが表示され、0は見えないものとします。2行目は「0+1」と「1+0」を足し合わせて求められ、その結果は両側をゼロに挟まれた形になります。この処理を、必要な段数に達するまで繰り返していきます。
プログラミングの観点では、パスカルの三角形は「前の行の隣接する要素を足し合わせて構成される配列」として定義できます。

プログラム1:配列と階乗を使う方法
このプログラムでは、階乗を計算する関数を利用して、パスカルの三角形の形に整数を出力します。
#include <stdio.h>
int fact(int);
int main(){
int i,rows,j;
printf("enter no of rows :");
scanf("%d",&rows);
for (i = 0; i < rows; i++){
for (j = 0; j <= (rows- i - 2); j++)
printf(" ");
for (j = 0 ; j <= i; j++)
printf("%d ",fact(i)/(fact(j)*fact(i-j)));
printf("\n");
}
return 0;
}
int fact(int n){
int a;
int sum = 1;
for (a = 1; a <= n; a++)
sum = sum*a;
return sum;
}
実行結果
Enter no of rows :5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
プログラム2:配列を使わない方法
次に、配列を使わずにパスカルの三角形を出力する方法を紹介します。このプログラムでは、直前の値を利用して次の値を順次計算していくため、メモリ効率が良いのが特徴です。
#include<stdio.h>
int main(){
int num,row,i;
printf("Enter the number of rows: ");
scanf("%d",&num);
for(row=1; row<=num; row++){
int a=1;
for(i=1; i<=row; i++){
printf("%d ",a);
a = a * (row-i)/i;
}
printf("\n");
}
return 0;
}
実行結果
Enter the number of rows: 6 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
まとめ
パスカルの三角形は、二項係数(nCr)の性質を利用することで簡単に出力できます。階乗を用いた方法は数学的な定義に忠実で理解しやすく、一方で配列を使わない方法は直前の値から次の値を計算するため、計算量を抑えられるのがメリットです。用途に応じて使い分けるとよいでしょう。
-
OpenCVとC++を使った色追跡の実装方法:HSV変換から軌跡の描画まで
色追跡(カラートラッキング)は、色検出とよく似た画像処理です。追跡を実現するには、検出したオブジェクトの面積を計算し、その領域の現在位置を求める処理を数行追加します。最後に、OpenCVのline()関数を使って、オブジェクトが移動した軌跡を線として描画します。 この記事では、トラックバーでHSVのしきい値をリアルタイムに調整しながら、Webカメラの映像から特定色のオブジェクトを検出し、その動きを追跡する方法を解説します。 色追跡の基本的な流れ 映像の取得:VideoCaptureクラスでWebカメラからフレームを取得します。 HSVへの変換:cvtColor()関数でBGR画像をHSV形
-
Pythonで画面に出力するには?print文の基本と使い方を解説
Pythonで画面(標準出力)に文字や値を表示する最も基本的な方法は、print文を使うことです。>>> print Hello, world Hello, worldカンマ区切りで複数の項目を出力する同じ行に複数の項目をスペースで区切って表示したい場合は、項目の間をカンマで区切ります。>>> print Hello,, World Hello, Worldこの例では、どちらの文字列にもスペースは含まれていませんが、2つのオブジェクトの間にあるカンマによって、print文が自動的にスペースを挿入してくれます。さまざまなデータ型の出力print文は文字列だけで