目录
题目链接:2043杨辉三角
2043:【例5.11】杨辉三角形
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 38429 通过数: 25339
【题目描述】
例5.11 打印杨辉三角形的前n(2≤n≤20)(2≤≤20)行。杨辉三角形如下图:
当n=5=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
解析
【解题思路】
二维数组递推经典问题
我们要考察输出时杨辉三角各位置之间数值的递推公式。
根据示例:
1
1 1
1 2 1
1 3 3 1
假设空的位置的值都是0,将其存结果应该为
通过观察可知,第i行有i个元素,第1列的元素都是1,除了第1列的元素,根据杨辉三角的定义,每个元素(i,j)是其上方元素(i-1,j)及左上方元素(i-1,j-1)的加和。
递推状态:a[i][j]:第i行第j列的值
递推初始状态:a[i][1] = 1
递推关系:a[i][j] = a[i-1][j] + a[i-1][j-1]
大家看了详解应该懂了吧现在,你们最期待的来了
诶嘿啊哈哈哈哈哈哈代码来喽啊哈哈哈哈哈(原梗:鸡汤来喽)
#include<bits/stdc++.h>
using namespace std;
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int a[21][21]={0},i,j,k,n;
cin>>n;
a[1][1]=1;
cout<<a[1][1]<<endl;
for(i=2;i<=n;i++){
for(j=1;j<=i;j++){
a[i][j]=a[i-1][j]+a[i-1][j-1];
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
现已成功运行,没有报错,验证输入输出样例完全正确,提交分数100分,是对的。
如果还有不会的题目,记得私信发给我,我将在CSDN中详解