1 条题解

  • 0
    @ 2025-5-26 21:35:47

    题解:Eva's Problem(数列填空)

    题目描述

    给定数列的前四项,判断其为等差数列或等比数列(题目保证唯一),并输出前五项。等差数列公差和等比数列公比均为自然数,所有项≤10510^5

    解题思路

    1. 等差数列判断
      若相邻两项差值相等(ba=cb=dcb-a = c-b = d-c),则为等差数列。第五项为 2dc2d - c(第四项加公差,公差为 dcd-c)。

    2. 等比数列处理
      若不满足等差数列条件,必为等比数列。公比 r=b/ar = b/a,第五项为 b×d/ab \times d / a(第四项乘公比)。

    代码实现

    #include <stdio.h>
    
    int main() {
        int t, a, b, c, d;
        scanf("%d", &t);
        while (t--) {
            scanf("%d %d %d %d", &a, &b, &c, &d);
            // 等差数列:相邻差值相等
            if (b - a == c - b && c - b == d - c) {
                printf("%d %d %d %d %d\n", a, b, c, d, 2 * d - c);
            } else {
                // 等比数列:公比b/a,第五项d*(b/a)
                printf("%d %d %d %d %d\n", a, b, c, d, b * d / a);
            }
        }
        return 0;
    }
    

    代码解释

    • 输入处理:读取测试用例数 tt,遍历每个数列的前四项。
    • 条件判断:通过差值比较确定数列类型,分别计算第五项。
    • 输出:按格式输出前五项,等差数列和等比数列的计算逻辑清晰。

    复杂度

    • 时间复杂度:O(t)O(t)t20t≤20),线性处理每个测试用例。
    • 空间复杂度:O(1)O(1),仅存储输入变量。

    总结

    该算法利用数列性质,通过简单条件判断和数学运算,高效求解问题。代码简洁,逻辑明确,适用于题目给定的所有合法输入。

    • 1

    信息

    ID
    659
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者