1 条题解

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

    📝 题目大意

    给定一个评级 RR1R2991 \le R \le 299),评级每 100100 分为一个区间,每个区间显示的 ^ 数量递增。求最少需要提升多少评级,才能使显示的 ^ 数量比当前多一个。

    💡 解题思路

    1. 题目分析:评级区间为 [1,99][1,99][100,199][100,199][200,299][200,299],分别对应 112233^RR 最大为 299299,下一个区间边界恰好是 100100 的整数倍,因此无需考虑超过 400400 的情况。

    2. 算法推导:要让 ^ 数量增加,只需让评级达到下一个 100100 的倍数即可:

      • R<100R < 100,下一个边界是 100100,需要提升 100R100 - R
      • 100R<200100 \le R < 200,下一个边界是 200200,需要提升 200R200 - R
      • 200R<300200 \le R < 300,下一个边界是 300300,需要提升 300R300 - R

      更一般地,答案为 R/100×100R\lceil R / 100 \rceil \times 100 - R,即上取整到最近的 100100 的倍数再减去 RR

    3. 边界与细节RR 保证 299\le 299,所以 300R1300 - R \ge 1,不会出现答案为 00 的情况。直接按分支判断即可,无需额外处理。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅做常数次比较和运算。
    • 空间复杂度O(1)O(1),仅使用一个整型变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    
    int main() {
        int R;
        cin >> R;
    
        // 判断当前评级所在区间,输出到达下一个100的倍数所需的提升量
        if (R < 100) {
            cout << 100 - R << endl;   // 从 1~99 提升到 100
        } else if (R < 200) {
            cout << 200 - R << endl;   // 从 100~199 提升到 200
        } else {
            cout << 300 - R << endl;   // 从 200~299 提升到 300
        }
    
        return 0;
    }
    
    • 1

    信息

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