とあるWEBサイトを参考にアルゴリズムの勉強をしてたのだが、パスカルの三角形のところのプログラムがうまく動いてくれなかったので作ってみた。
#include <iostream>
using namespace std;
int main() {
int sp[64];
int tmp[64];
int height = 10;
for (int i=0; i<=height; i++) {
for (int j=0; j<=i; j++) {
if ( i==0 || j==0 || j==i)
sp[j] = 1;
else
sp[j] = tmp[j] + tmp[j-1];
cout << sp[j] << " ";
}
for (int k=0; k<=i; k++)
tmp[k] = sp[k];
cout << endl;
}
return 0;
}
実行結果
[jklryo@cygwin] $ g pascals_triangle.cpp
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
gってのは g++ と ./a を組み合わせただけのbashスクリプトです。便利。
C++なのは、まあ気にするな。
配列に64って書いてあるけど、33過ぎたあたりから計算結果が32bitの範囲からあふれてわけわからんことになる。unsigned指定すればもっといく。64bitにすればさらに! とはいっても横幅足りなくて3角形にならないので悲しい。