找规律填数字

描述

小瑜还在读幼儿园呢,现在的小孩子正够可怜的......
这不,老师给孩子们布置了一道连很多大人都不会的数学题目。且看:
给你一组有规律序列的前面5个整数,请你给出它后面跟着的5个整数,如:1,2,3,4,5,___,___,___,__,___。这是个等差数列, 后面应该是6,7,8,9,10,这倒简单。但现在老师告诉孩子们这串序列有可能是等差数列,等比数列或者是斐波那契数列。亲爱的,你能帮小瑜完成这个题目吗?

输入

输入有多组数据,每组数据占一行,有5个数字组成,每个数字之间隔一个空格,当5个数字都为0时输入结束。

输出

每组测试数据对应一个输出为这串数列的后面5个数字,每个数字之间隔一个空格。当输入的5个数字都为0时不用输出结果。

样例输入

1 2 3 4 5
1 2 4 8 16
1 2 3 5 8
0 0 0 0 0

样例输出

6 7 8 9 10
32 64 128 256 512
13 21 34 55 89
#include
#include
#include
#include
int main()
{
   int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,d,q;
   while(scanf("%d %d %d %d %d",&x1,&x2,&x3,&x4,&x5)==5)
   {
   if(x1==0&&x2==0&&x3==0&&x4==0&&x5==0) break;
   if((x2-x1)==(x3-x2)&&(x4-x3)==(x5-x4))
   {
   d=x2-x1;
   x6=x5+d;
   x7=x6+d;
   x8=x7+d;
   x9=x8+d;
   x10=x9+d;
   }
   else
   {
       if(((double)x2/x1)==((double)x3/x2)&&((double)x4/x3)==((double)x5/x4))
       {
       q=x2/x1;
       x6=x5*q;
       x7=x6*q;
       x8=x7*q;
       x9=x8*q;
       x10=x9*q;
       }
       else
       {
           x6=x4+x5;
           x7=x5+x6;
           x8=x6+x7;
           x9=x7+x8;
           x10=x8+x9;
           }
       }
       printf("%d %d %d %d %d\n",x6,x7,x8,x9,x10);
   }
    return 0;
    } 


这里有一点要注意的是等差数列的时候需要一个强制性的转换1.0*某个整数会隐式的将这个数转换成double,然后再执行后面的除法运算。 如果你做除法以后再转换成double,那么做的其实还是整数除法(也就是小数点部分被略去了),所以要在等差数列前加一个double型的强制转化,其余的很简单了

你可能感兴趣的:(简单数学)