【题目链接】
ybt 1087:级数求和
ybt 1918:【02NOIP普及组】级数求和
OpenJudge NOI 1.5 27:级数求和
【题目考点】
1. 循环、求和
【解题思路】
- 设加和变量s
- n从1开始循环,每次循环将1/n加入s中,而后n增加1
- 当发现s > k时,跳出循环。
- 很明显,此时n的值即为要求的最小的n,记此值为nm。
- 当n < nm时,无法满足s > k
- 当n > nm时,可以满足s > k,但nm比n更小。
所以nm是要求的结果。
【题解代码】
解法1:用while循环
#include<bits/stdc++.h>
using namespace std;
int main()
{
double s = 0;//s:题中的Sn,k:题中的K,n:题中的n
int n = 0, k;
cin>>k;
while(s <= k)
{
n++; //n从1开始参与运算
s += 1.0 / n;//1.0/n可以避免进行整除运算,使表达式是值是浮点型量
}
cout<<n;
return 0;
}
解法2:用for循环
#include<bits/stdc++.h>
using namespace std;
int main()
{
double s = 0;//s:题中的Sn,k:题中的K,n:题中的n
int n, k;
cin>>k;
for(n = 1; s <= k; ++n)
s += 1.0 / n;//1.0/n可以避免进行整除运算,使表达式是值是浮点型量
cout<<n - 1;//跳出前n又多加了一次1,将这个1减掉,就是最终结果
return 0;
}