CCA的数列

题目链接:nowcoder 213875

到主站看:https://blog.csdn.net/weixin_43346722/article/details/112132183

题目大意

判断一个数列是否是等差序列,等比数列,等模数列的其中一个。
等模数列的定义是:对于任意相邻两数,后一个对前一个取模后的值均相等。

思路

就直接模拟,开三个 bool 变量。

最后只要剩下一个,都输出 YES,否则就是 NO

记得等比数列的那个地方,相邻数的比不一定是整数,可能是小数。

代码

#include<cstdio>

using namespace std;

int n, cha, mo, a[100001];
double bi;
bool yes1, yes2, yes3;

int main() {
    yes1 = yes2 = yes3 = 1;

    scanf("%d", &n);
    scanf("%d %d", &a[1], &a[2]);
    cha = a[2] - a[1];
    bi = (a[2] * 1.0) / (a[1] * 1.0);
    mo = a[2] % a[1];
    for (int i = 3; i <= n; i++) {
        scanf("%d", &a[i]);

        if (yes1) {
            if (cha != a[i] - a[i - 1]) {
                yes1 = 0;
            }
        }
        if (yes2) {
            if (bi != (a[i] * 1.0) / (a[i - 1] * 1.0))
                yes2 = 0;
        }
        if (yes3) {
            if (mo != a[i] % a[i - 1])
                yes3 = 0;
        }

        if (!yes1 && !yes2 && !yes3) {
            printf("NO");
            return 0;
        }
    }

    if (yes1 || yes2 || yes3) printf("YES");
        else printf("NO");

    return 0;
}