帕斯卡三角形每一行对应二项式展开系数,如:
1
1 1
1 2 1
1 3 3 1
...
Input
多组数据,每组一个整数 1 ≤ n ≤ 1000
Output
帕斯卡三角第 n 行,每个数取模 10^9 + 7 的结果
思路(直接):用一维数组将一行的每两个数相加形成下下一行的数,就要用到两个for循环,外层循环去循环i次,内层循环计算第i行的全部数。假设算到第i-1行,算第i行时,就要将数组b[]后一个和前一个相加得出新的数,比如第i行的第6位就是,第i-1行的第6位加上第5位。(注意:如果我们是从前面开始加,就是新的b[3]等于b[2]+b[3],然后再去算b[4]=b[3]+b[4],而此时b[3]是新的b[3],我们要用旧的b[3]才能算出正确的b[4],因此我们从尾部开始算,这样可以避免出错)
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{ int b[1050];
int m;
while(~scanf("%d",&m))
{ memset(b,0,sizeof(b));b[1]=1; //先将数组b全部初始化为0,还有直接把第一行的弄为1
for(int i=2;i<=m;i++)
{
for(int j=i;j>=2;j--) //从最后一个i开始算起
{
b[j]=(b[j]+b[j-1])%1000000007;
//注意:这里不能写成b[j]+=b[j-1]%1000000007 两者有区别
}
}
for(int w=1;w<=m;w++)
{
w==1? printf("%lld",b[w]):printf(" %lld",b[w]);
}
printf("\n");
}
return 0;
}