题解:洛谷 P1035 [NOIP 2002 普及组] 级数求和

【题目来源】

洛谷:P1035 [NOIP 2002 普及组] 级数求和 - 洛谷 (luogu.com.cn)

【题目描述】

已知:\(S_n=1+\frac{1}{2}+\frac{1}{3}+\dots+\frac{1}{n}\)。显然对于任意一个整数 \(k\),当 \(n\) 足够大的时候,\(S_n\gt k\)

现给出一个整数 \(k\),要求计算出一个最小的 \(n\),使得 \(S_n\gt k\)

【输入】

一个正整数 \(k\)

【输出】

一个正整数 \(n\)

【输入样例】

1

【输出样例】

2

【算法标签】

《洛谷 P1035 级数求和》 #数学# #NOIP普及组# #2002#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件
using namespace std;

int main()
{
    int n = 1, k;      // n: 当前项数,从1开始计数;k: 用户输入的阈值
    double s = 0;      // s: 调和级数的累加和
  
    cin >> k;          // 输入阈值k
  
    // 循环计算调和级数,直到和s超过阈值k
    while (s <= k) 
	{
        s += 1.0 / n;  // 将当前项1/n加到总和s中
        n++;           // 移动到下一项
    }
  
    // 输出结果:n-1是因为循环结束时n已经自增了一次
    cout << n - 1;
  
    return 0;
}

【运行结果】

1
2
posted @ 2026-02-16 15:15  团爸讲算法  阅读(2)  评论(0)    收藏  举报