1 条题解

  • 0
    @ 2034-6-2 11:12:31

    【例27.3】 第几项

    解题思路

    从 1 起逐项累加,当前和不超过 m 时继续;第一次大于 m 后停止。部分和严格递增,因此停下的位置是最早超出的一项。

    正确性说明

    按上述推导执行:每次仅处理当前输入或当前步骤,并把它对答案的贡献计入对应状态。所有需要处理的情况均被覆盖,结束时保存的量就是题目所求。

    易错点

    题目是超过,和等于 m 时还要再加一项。

    复杂度

    时间 O(√m),空间 O(1)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        long long m;
        cin >> m;
        long long sum = 0;
        int n = 0;
        while (sum <= m) {
            n++;
            sum += n;
        }
        cout << n << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    187
    时间
    1000ms
    内存
    64MiB
    难度
    入门
    标签
    递交数
    0
    已通过
    0
    上传者