找规律填数字(难AC,细节多)

题目描述
小宇正在读小学,今天老师布置了几道数学题目。小宇平时上课经常不专心,这些他可发愁了,怎么办呢?看看你能不能帮帮他。
题目是给你一组有规律序列的前面5个整数,请你给出它后面跟着的5个整数,如:1,2,3,4,5,___,___,_,,___。这是个等差数列,后面应该是6,7,8,9,10,就这么简单。而且现在小宇已经知道这串序列要么是等差数列,要么是等比数列或者是斐波那契数列。
输入

输入包含多组测试数据。每组输入5个整数,每个数字之间隔一个空格,当5个数字都为0时输入结束。

输出

对于每组输入,输出这串数列的后面5个数字,每个数字之间隔一个空格。

样例输入

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

本题思路很简单但是不容易AC

要注意

  • 两数相比会有以下情况:256 128 64 32 16,所以公比定义为double且需要强制类型转换,否则后五个数会输出 0 0 0 0 0
  • 公差和公比的定义应写在 if 语句内
  • 判断条件应该写完整,否则无法清楚判断2 4 6 10 16这种数据究竟是等差数列还是Fibonacci数列
  • 用b - a == c - b && c - b == d - c && d - c == e - d判断是否是等差数列
  • 用b / a == c / b && c / b == d / c && d / c == e / d判断是否是等比数列且所有两数之比都要加上double否则不能AC(精度问题)
  • 用a + b == c && b + c == d && c + d == e判断是否是Fibonacci数列

AC代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    int a,b,c,d,e;
    //abcde不全为0
    while (cin >> a >> b >> c >> d >> e && (a || b || c || d || e))
    {
        int f,g,h,i,j;
        
        //公差相等 
        if (b - a == c - b && c - b == d - c && d - c == e - d) 
        {
            int d1 = b - a;
            f = e + d1;
            g = f + d1;
            h = g + d1;
            i = h + d1;
            j = i + d1;
        }
        
        //公比相等
        else if ((double)b / a == (double)c / b && (double)c / b
                               == (double)d / c && (double)d / c == (double)e / d)
        {
            double q1 = (double)b / a;//公比(强转为double解决相比为0的情况)
            f = e * q1;
            g = f * q1;
            h = g * q1;
            i = h * q1;
            j = i * q1;
        }
        
        //Fibonacci 2 4 6 10 16
        else if (a + b == c && b + c == d && c + d == e)
        {
            f = d + e;
            g = e + f;
            h = f + g;
            i = g + h;
            j = h + i;
        }
        cout << f << " " << g << " " << h << " ";
        cout << i << " " << j << endl;
    }
    return 0;
}
上一篇:一种超温监测自动控制电路


下一篇:C语言八皇后问题