[NOIP 2002 普及组] 级数求和 · 教师题解

[NOIP 2002 普及组] 级数求和

知识点

循环、浮点数、累加

解题思路

依次累加1/i,直到和严格大于输入的K,输出当前项数。

正确性说明

各项均为正数,部分和严格递增;第一次超过K之前都不符合要求,第一次超过时就是最小项数。

易错点

1.0/i必须采用浮点除法;题目要求严格大于K,因此循环条件为sum<=K。

复杂度

设答案为n,时间O(n),空间O(1)。

参考代码(GNU C++17)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int k,n=0;cin>>k;double sum=0;
    while(sum<=k){++n;sum+=1.0/n;}
    cout<<n<<'\n';
}
返回题目