其他分享
首页 > 其他分享> > 找规律填数字(难AC,细节多)

找规律填数字(难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

要注意

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;
}

标签:q1,AC,数字,double,公比,细节,&&,include,d1
来源: https://blog.csdn.net/smallrain6/article/details/113439212