フォームでパスカルの三角形以下に示すように
しかし、このマップDOを再生する方法はありますか?
私たちは、すべてゼロに欠員を埋めることができ、かつ法律を見つけること。
図に示すように、充填ギャップ後0。
私たちは、行と列の数は、RとCに設定されている置きます。
我々は見つけることができます上の図では:
また、R = 4、C = 9。
また、R = 7、C = 15。
このような法律を得ることができます。
C = 2 * R +1と最初のインデックス番号は、C / 2を与えるように丸みを帯びたダウンしているの最初の行 |
---|
加えて、我々はまた、見ることができます:
前の行との和のこれら斜め線の数の2つの数値を。
番号はすべて行列を格納するために[R] [C]を使用した場合、この配列、I、Jは、それぞれ行および列に対して、この規則を得ることができます。
行列[I] [J] =行列[I-1] [J-1] +行列[I-1] [J + 1]。 |
---|
次のようにコードを得ることができます。
#include<bits/stdc++.h>
using namespace std;
int main() {
// int r,c;//分别表示r行和c列。
int r,c;
cin>>r;
c=2*r+1;//列数与行数的关系。
int r_one=c/2;//第一行的第一个数。(以第一行的第一个数为起点)
int matrix[r][c]; //把所有r行c列的所有点都标为0。
memset(matrix,0,sizeof(matrix));//这里是把二维数组所有项都初始化为零
matrix[0][r_one]=1;
for(int i=1; i<r; i++) {
for(int j=1; j<c; j++) {
matrix[i][j]=matrix[i-1][j-1]+matrix[i-1][j+1];
}
}
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
if(matrix[i][j]==0)
printf(" \t");
else
printf("%d\t",matrix[i][j]);
}
cout<<endl;
}
return 0;
}
咲いてください。