[c语言]一维数组输出杨辉(帕斯卡)三角形第n行题解

帕斯卡三角形每一行对应二项式展开系数,如:

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;
 }

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值