级数求和

GitHub跳转原题关系图返回列表

从第一项开始累加调和级数,直到和严格大于给定整数 K。

OJ: noi_openjudge

题目 ID: ch0105-27

难度:入门

标签:循环模拟数学python

日期: 2026-07-30 23:01

题意

求最小的正整数 nn,使得

1+12++1n>K. 1 + \frac{1}{2} + \cdots + \frac{1}{n} > K.

思路

从第 11 项开始逐项累加。变量 term 表示当前加入的是第几项,total 表示已经得到的级数和。

循环条件必须写为 total <= threshold:题目要求的是严格大于 KK,当和恰好等于 KK 时还必须继续加入下一项。循环结束时的 term 就是最小答案。

代码

Python代码

python
threshold = int(input())
total = 0.0
term = 0

while total <= threshold:
    term += 1
    total += 1 / term

print(term)

C++代码

cpp
#include <cstdio>

int main(){
    int k;
    scanf("%d",&k);
    double sum = 0,kk = k;
    int i;
    for (i=1;1;i++){
        sum += 1.0/i;
        if( sum > k){
            printf("%d",i);
            return 0;
        }
    }
    return 0;
}

复杂度

设答案为 nn,循环执行 nn 次,时间复杂度为 O(n)O(n),额外空间复杂度为 O(1)O(1)

总结

处理“最小位置使条件成立”时,先写清结束条件是否包含等号,能避免典型的边界错误。