找规律

描述
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>
int main()
{
	int a[100],flag=1;
	int i,j,n;
	while(scanf("%d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4]) != EOF)     
	{
		i=0;
		flag=1;
		int k=1;
        for(i=0;i<5;i++)
		   {
               if(a[i]==0)
			   {
				   k=0;
			   }
		   }
       if(k&&a[2]%a[1]==0&&a[3]%a[2]==0&&a[4]%a[3]==0&&a[1]%a[0]==0)
	   {
		   n=a[2]/a[1];
		   for(i=5;i<10;i++)
		   {
               a[i]=a[i-1]*n;
		   }
	   }
       else  if(a[1]-a[0]==a[2]-a[1] && a[2]-a[1]==a[3]-a[2] && a[3]-a[2]== a[4]-a[3])
	   {
              n=a[2]-a[1];
             for(i=5;i<10;i++)
			 {
               a[i]=a[i-1]+n;
			 }
	   }
	   else if(a[3]==a[2]+a[1]&&a[4]==a[3]+a[2]&&a[2]==a[1]+a[0])
	   {
             for(i=5;i<10;i++)
			 {
               a[i]=a[i-1]+a[i-2];
			 }
	   }
	   else
	   {
		   flag=0;
		   printf("None\n");
	   }
	   if(flag)
	   {
	   for(i=5;i<10;i++)
	   {
		   printf("%d ",a[i]);
	   }
	   printf("\n");
	   }
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/xiaoli130134/article/details/80558243