题目描述
还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
输入
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。
输出
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
样例输入
2 3
样例输出
1
1 1
1
1 1
1 2 1
我们可以很快找到其中的规律:从第二层开始,当前层的每个数取决于上一层相同位置的数字和其前一位数字之和(上层的某位无数字则默认为0)。
代码如下:
#include <stdio.h>
#include <string.h>
void yangTri(int m[], int n[], int level, int lim)
{
int i;
for(i = 1; i <= level-1; i++) // 输出上一层
printf("%d ", m[i]);
putchar('\n');
if(level > lim) // 停止条件
return;
for(i = 1; i <= level; i++) // 计算当前层
n[i] = m[i]+m[i-1];
yangTri(n, m, level+1, lim);
}
int main()
{
int a[31], b[31];
int n;
int i;
while(scanf("%d", &n) != EOF)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
a[1] = 1; // 0位空出
i = 2; // 从第二层开始计算
yangTri(a, b, i, n);
putchar('\n');
}
return 0;
}