找规律
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
xiaod 在小学时最喜欢上数学课了,有一次上课,数学老师布置了一道题目:给你一组有规律的整数,而且只给出前5项,让你求出后面5项。比如:1,2,3,4,5,__,__,__,__,__。显然这是等差数列,所以答案应该是6,7,8,9,10。为了简化题目,老师规定规律只有三种:等差数列、等比数列、斐波那契数列(f[i]=f[i-2]+f[i-1]);且公差、公比均为整数,所有出现的数字不会超出 int 范围。怎么样,很简单吧?聪明的你,来比一比你和 xiaod 谁算的快吧。
输入
有多组测试数据。
每行5个整数,代表题目给出的前5项。
输出
如果能找到符合条件的规律,则输出5个整数,代表后5项的值。
否则,请输出"None"。(引号不用输出)
样例输入
1 2 3 4 5
2 3 5 8 13
样例输出
6 7 8 9 10
21 34 55 89 144
上传者
解题思路:
注意一下等比数列。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int a,b,c,d,e;
while(scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)!=EOF)
{
if(b-a==c-b&&c-b==d-c&&e-d==d-c)
{
int i=b-a;
printf("%d ",e+i);
printf("%d ",e+2*i);
printf("%d ",e+3*i);
printf("%d ",e+4*i);
printf("%d\n",e+5*i);
}
else if(a*c==b*b&&b*d==c*c&&c*e==d*d&&a!=0&&b!=0&&c!=0&&d!=0&&e!= 0)
{
int i=b/a;
printf("%d ",e*i);
printf("%d ",e*i*i);
printf("%d ",e*i*i*i);
printf("%d ",e*i*i*i*i);
printf("%d\n",e*i*i*i*i*i);
}
else if(a+b==c&&b+c==d&&c+d==e)
{
int map[10];
map[1]=d;
map[2]=e;
int cccc=5;
int ii=3;
while(cccc--)
{
if(cccc!=0)
{
map[ii]=map[ii-1]+map[ii-2];
printf("%d ",map[ii]);
}
else
{
map[ii]=map[ii-1]+map[ii-2];
printf("%d",map[ii]);
}
ii++;
}
printf("\n");
}
else
{
printf("None\n");
//cout << "None" << endl;
}
}
return 0;
}