zoukankan      html  css  js  c++  java
  • 8629 热身游戏

    8629 热身游戏

    时间限制:500MS  内存限制:1000K
    提交次数:423 通过次数:61

    题型: 编程题   语言: G++;GCC

     

    Description

        ACM 程序设计竞赛是一项激励人心的竞赛,除了考验大家的编程功底,更多的是考验大家的思维以
    及数学运算能力。开赛前15分钟,我们华农的某队开始了以下对话:
    ipc:“我们玩接龙热一下身吧!免得一会没睡醒。”
    Arokenda:“好啊!没问题!怎么玩?”
    ipc:“我先写两个数,然后你我轮流接着已经写好的数列继续写数,每人写1 个数。接龙的规则就是,
    下一个数是前两个数的和。”
    Arokenda:“这还不简单!不就是Fibonacci数列嘛。绝对秒杀啦!”
        此时,ipc 开始写数:1、3。居然不是Fibonacci 数列!下一个就是4 啦!接着数列成型了:1、3、
    4、7、11、18……一直写了N 项,ipc 觉得热身还不够。于是他忽然说了句:“求前N 项和怎么样?”两
    个人顿时“卡”了一下……
    若ipc写出数列的前两项以及项数,你能算出来吗?
    




    输入格式

    输入一个整数T(T<=20),表示ipc写了T个数列。
    接下来T行, 每行三个整数, 分别为a1,a2,n , 分别表示该数列的前两项和项数。其中0<a1,a2,n<=1000
    



    输出格式

    每组数据输出一行,该数列的前n项和sum(n)。



     

    输入样例

    3
    1 2 15
    1 1 10
    2 2 10
    



     

    输出样例

    2582
    143
    286
    



     

    提示

    
    



     

    来源

     朱伟琛 

     

    作者

     admin

      求数列的前N项和,这道题里可以直接暴力累加,唯一考到的就是高精度加法;不过这里用到的高精度函数写的并不好。。。

     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 using namespace std;
     5 
     6 void big_add(char*str1,char*str2,char*strsum);
     7 int main()
     8 {
     9     int t,n,i;
    10     scanf("%d",&t);
    11     while(t--)
    12     {
    13         char strsum[100000];
    14         char str1[100000],str2[100000],strtemp[100000]; char*temp1=NULL,*temp2=NULL,*sum=strsum;
    15         scanf("%s %s %d",str1,str2,&n);
    16         temp1=str1; temp2=str2;
    17         char*str_temp=strtemp;
    18         big_add(temp1,temp2,sum);
    19         if(n==1)
    20         {
    21             printf("%s
    ",str1);
    22             continue;
    23         }
    24         if(n==2)
    25         {
    26             printf("%s
    ",sum);
    27             continue;
    28         }
    29         //
    30         for(i=3;i<=n;i++)
    31         {
    32            big_add(temp1,temp2,str_temp);
    33            big_add(sum,str_temp,sum);
    34            strcpy(str1,str2); strcpy(str2,strtemp);
    35 
    36         }
    37         printf("%s
    ",strsum);
    38     }
    39     return 0;
    40 }
    41 void big_add(char*str1,char*str2,char*tsum)
    42 {
    43 
    44     int sum[100000]={0}; int i,j,k=0;
    45     i=strlen(str1); j=strlen(str2);
    46     i--;j--;
    47     for(;i>=0&&j>=0;i--,j--)
    48     {
    49         sum[k++]+=str1[i]-'0'+str2[j]-'0';
    50     }
    51     //
    52     while(i>=0)
    53         sum[k++]+=str1[i--]-'0';
    54     while(j>=0)
    55         sum[k++]+=str2[j--]-'0';
    56     for(i=0;i<k;i++)
    57         if(sum[i]>=10)
    58         {
    59             sum[i]-=10;
    60             sum[i+1]++;
    61         }
    62     //
    63     if(sum[k]==0) k--;
    64     j=0;
    65     for(i=k;i>=0;i--)
    66     {
    67         tsum[j++]=sum[i]+'0';
    68     }
    69     tsum[j]='';
    70 
    71 }
  • 相关阅读:
    忙活了半宿,写了个小玩意
    luogu P5171 Earthquake
    luogu P1850 换教室
    luogu P2507 [SCOI2008]配对 |动态规划
    luogu P3830 [SHOI2012]随机树
    luogu P3959 宝藏
    牛客竞赛-比赛
    牛客竞赛-Who killed Cock Robin
    luogu P3807 【模板】卢卡斯定理
    牛客竞赛 -被3整除的子序列
  • 原文地址:https://www.cnblogs.com/geek1116/p/5243134.html
Copyright © 2011-2022 走看看