7829:神奇序列求和

总时间限制: 

1000ms

内存限制: 

65536kB

描述

有一个序列,初始时只有两个数x和y,之后每次操作时,在原序列的任意两个相邻数之间插入这两个数的和,得到新序列。举例说明:

初始:1 2

操作1次:1 3 2

操作2次:1 4 3 5 2

……

问操作n次之后,得到的序列的所有数之和是多少?

输入

三个整数x,y,n,相邻两个数之间用单个空格隔开。0 <= x <= 5, 0 <= y <= 5, 1 < n <= 10。

输出

一个整数,即最终序列中所有数之和。

样例输入

1 2 2

样例输出

15

#include <bits/stdc++.h>//Writed by Wangzhimin Date:2022.05.30 
using namespace std;
int a,b,n;
#define Max 1600
int tmp[12][Max];//用数组存每次的值,列要足够大,1500还不行呢 
int main()
{
    int x,sum=0;
    scanf("%d%d%d",&a,&b,&n);
    memset(tmp,-1,sizeof(tmp));//初始为-1,因为可以是0值,无法判断结束标志 
    tmp[0][0]=a,tmp[0][1]=b;//第一行的两个值 
    for(int i=0;i<n;i++)//从第0行开始计算下行的,即第一次的依次 
    {
        x=0;//每次下列要加上2 
        for(int j=0;j<Max;j++)//列,从0开始计算下行的 
        {
                tmp[i+1][x]=tmp[i][j];// 第一个列的数下来,不动 
                if(tmp[i][j+1]!=-1)//如果不是最后出列了 ,不用再做加法了 
                tmp[i+1][x+1]=tmp[i+1][x]+tmp[i][j+1];//把上个数(不动的那个)与它的下一个列的相加,放在下一行 
                x=x+2;//下列的加2 ,因为计算了两个数。 
        }
        }
    for(int i=n,j=0;j<Max;j++)//第n次操作的在第n行。 
    {
        if(tmp[i][j]==-1)
        break;
        else
        sum+=tmp[i][j];
    }
        cout<<sum<<endl;
/*for(int i=0;i<=n;i++){
    for(int j=0;j<2000;j++)
    cout<<tmp[i][j]<<" ";
    cout<<endl;}  */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值