这类题目,一般是求第n行长啥样,也有求从第一行打印到第n行的
此处,只做了第n行长啥样:
#include<stdio.h>
#include<string.h>
//求 杨辉三角形的第n行长啥样
int a[34];
int b[34];
int main(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
a[1] = 1;
a[2] = 1;
b[1] = 1;
int n;
scanf("%d",&n);
for(int i = 3;i <= n;i++){
for(int j = 2; j <= i-1;j++){
b[j] = a[j - 1] + a[j];
}
b[i] = 1;
for(int x = 1; x <= i;x++){
a[x] = b[x];
}
}
for(int i = 1;i <= n;i++)
if(i == 1)
printf("%d",a[i]);
else
printf(" %d",a[i]);
return 0;
}

思路:

需要两个数组a,b,先将a[1] = 1;a[2] = 1
再求第n行数组长啥样时,可以先以a为基础,计算b的值,然后将b复制进a
由上图的连线可以知道:
for(int j = 2; j <= i-1;j++){
b[j] = a[j - 1] + a[j];
}
b[i] = 1;
每一个新派生的行,第一位和最后一位是1,可以从第2位开始,往后到第n-1位遍历构建
然后外层套个大循环,由3到n不断遍历构建即可