1 条题解

  • 0
    @ 2026-6-19 10:30:36

    📝 题目大意

    给定 8 个整数,判断是否同时满足三个条件:数列非严格单调递增、每个数都在 [100,675][100, 675] 范围内、每个数都是 2525 的倍数。全满足输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析:数据范围很小(0Si10000 \le S_i \le 1000,仅 8 个数),只需依次检查三个条件,任意一个不满足即可输出 No
    2. 算法推导
      • 读入 S[0..7],设标志 ok = true
      • 遍历每个元素,检查 S[i] 是否在 [100,675][100, 675] 内,以及 S[i] % 25 == 0,任一不满足则 ok = false 并跳出。
      • 再遍历前 7 个元素,检查 S[i] > S[i+1](单调性破坏),若存在则 ok = false
      • 最后根据 ok 输出 YesNo
    3. 边界与细节
      • 题目保证 Si1000S_i \le 1000,但 2525 的倍数校验 (% 25) 天然覆盖了这一范围。
      • 注意单调性是非严格递增(SiSi+1S_i \le S_{i+1}),判断时用 > 取反。
      • 三个条件检查顺序无关紧要,因为只要有一个不满足就输出 No

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅处理固定 8 个数。
    • 空间复杂度O(1)O(1),使用固定大小的数组。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    int main() {
        int S[8];
        // 读入 8 个整数
        for (int i = 0; i < 8; i++) {
            cin >> S[i];
        }
        bool ok = true;
        // 检查条件 2(范围 [100, 675])和条件 3(25 的倍数)
        for (int i = 0; i < 8; i++) {
            if (S[i] < 100 || S[i] > 675) {
                ok = false;
                break;
            }
            if (S[i] % 25 != 0) {
                ok = false;
                break;
            }
        }
        // 检查条件 1(非严格单调递增)
        for (int i = 0; i < 7; i++) {
            if (S[i] > S[i + 1]) {
                ok = false;
                break;
            }
        }
        // 输出结果
        if (ok) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    723
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者