一月17日新生冬季练习赛解题报告F.Play Game 1

看到F题彭彪写的解题报告想死的心都有   

数太少了  随便投机取巧都能过  作死啊

不过值得注意的是等比数列不能相除  分母不能能为零  否则会re

F.Play Game 1

Time Limit: 1000 MS

Memory Limit: 32768 K

Total Submit: 279 (78 users)

Total Accepted: 62 (62 users)

Special Judge: No

Description

小S和小O在玩一个游戏:小S给小O一组有规律的整数,而且只给出前5项,让他求出后面5项。比如:1,2,3,4,5,__,__,__,__,__。显然这是等差数列,所以答案应该是6,7,8,9,10。为了简化题目,老师规定规律只有三种:等差数列、等比数列、斐波那契数列(f[i]=f[i-2]+f[i-1]);且公差、公比均为整数,所有出现的数字不会超出 int 范围。

Input

多组输入数据,每组数据只有5个数,正好5个数,保证不会超出int。

Output

如果能找到符合条件的规律,则输出5个整数,代表后5项的值。

否则,请输出”None”。(引号不用输出)。

Sample Input

1 2 3 4 5

2 3 5 8 13

Sample Output

6 7 8 9 10

21 34 55 89 144

Hint

每个数字之后都有空格,囧。

#include<stdio.h>

#include<string.h>

#include<math.h>

#include<algorithm>

using namespace std;

int main()

{

    int i,a[10];

    while (~scanf("%d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4]))

    {

        int flag=1;

        if (a[0]+a[1]==a[2]&&a[1]+a[2]==a[3]&&a[2]+a[3]==a[4])

        {

            for (i=5; i<10; i++)

            {

                a[i]=a[i-1]+a[i-2];

                printf("%d",a[i]);

                if (flag)

                    printf(" ");

                flag++;

            }

        }

        else if (a[0]+a[2]==2*a[1]&&a[1]+a[3]==2*a[2]&&a[2]+a[4]==2*a[3])

        {

            int d=a[1]-a[0];

            for (i=5; i<10; i++)

            {

                a[i]=a[i-1]+d;

                printf("%d",a[i]);

                if (flag)

                    printf(" ");

                flag++;

            }

        }

        else if (a[0]*a[2]==a[1]*a[1]&&a[1]*a[3]==a[2]*a[2]&&a[2]*a[4]==a[3]*a[3])

        {

            int d=a[1]/a[0];

            for (i=5; i<10; i++)

            {

                a[i]=a[i-1]*d;

                printf("%d",a[i]);

                if (flag)

                    printf(" ");

                flag++;

            }

        }

        else

            printf("None");

        puts("");

    }

    return 0;

}

原文地址:https://www.cnblogs.com/zhanzhao/p/3525662.html