##杨辉三角
还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
Input
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。
Output
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
Sample Input
2 3
Sample Output
1
1 1
1
1 1
1 2 1
问题链接
https://cn.vjudge.net/problem/CodeForces-1A
问题简述
略
程序说明
通过规律可知,每行第一个(可用公式(k == i * (i - 1) / 2 + 1)和最后一个(k == i * (i - 1) / 2 + i)都是1,且中间的都加上往前对应所在的行数的数字和下一个(比如第三行的2就是它的第前三个1加上第前二个1的和)
#include <iostream>
using namespace std;
int main()
{
int a[470],n,i,j,k;//定义数组存放杨辉三角的数字
while (cin >> n)//用while来实现多组数据输入,输入三角的层数
{
k = 1;//每输出一个杨辉三角对k再次赋值1
for (i = 1; i <= n; i++)//判断输出的行数
{
for (j = 1; j <= i; j++, k++)/j用来判断每行输出的个数 /k用来判断输出第几个数
{
if (k == i * (i - 1) / 2 + 1 || k == i * (i - 1) / 2 + i)//每行第一个和第二个附1
{
a[k] = 1; cout << a[k];
if (k == i * (i - 1) / 2 + i) //判断如果是每行最后一个数,换行
cout << endl;
else cout << " ";
}
else { a[k] = a[k - i] + a[k - i + 1]; cout << a[k] << " "; }
}
if (i == n)cout << "\n";每完成一个杨辉三角空一行
}
}
}
在这里插入代码片