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 }
原文地址:https://www.cnblogs.com/geek1116/p/5243134.html