1.杨辉三角形
【题目描述】
例5.11 打印杨辉三角形的前n(2≤n≤20)行。杨辉三角形如下图:
当n=5时
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
【输入】
输入行数n。
【输出】
输出如题述三角形。n行,每行各数之间用一个空格隔开。
【输入样例】
5
【输出样例】
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
2.源码
#include<iostream>
using namespace std;
int a[1000][1000];
int i,j;
int main()
{
int n;
cin>>n;
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
if(j==0||i==j){
a[i][j]=1;
}
else{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
3.图文题解
输出样例转换成了图形:
上图是以( i , j )的方式进行展示的。
从图中可以发现1有好多个,观察一下元素1的坐标。
得出结论:只要j是0的情况下,元素都是1,还有i等于j的时候,元素也是1。
所以,我们就可以得出下列的条件。我们只要满足其中一个条件,就让二维数组存储元素1。
if(j==0||i==j){
a[i][j]=1;
}
当元素不是1的情况下,就会出现下面的规律:
左上角的值会和上面的值进行相加,得出一个新的值,这便是杨辉三角的规律,也是杨辉三角的特点。
例如:a[2][1]=a[1][0]+a[1][1]
通过图形+例子得出公式:
a[i][j]=a[i-1][j-1]+a[i-1][j];
主要问题解决之后,接着,只要用循环遍历一下二维数组,就能打印杨辉三角了。
注意事项:根据n的范围:2≤n≤20 ,得出二维数组定义的方法:int a[n+1][n+1];
因此,下面就出现了第二种写法:只要比n的范围大即可。
#include<iostream>
using namespace std;
int i,j;
int main()
{
int n;
cin>>n;
int a[n+1][n+1];
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
if(j==0||i==j){
a[i][j]=1;
}
else{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}