【02NOIP普及组】级数求和

问题遇到的现象和发生背景

1918:【02NOIP普及组】级数求和

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 6723 通过数: 3960
【题目描述】
已知:Sn=1+12+13+…+1n。显然对于任意一个数K,当n足够大的时候,Sn大于K。 现给出一个整数K(1≤K≤15),要求计算出一个最小的n,使得Sn>K。

【输入】
一行,一个整数K。

【输出】
一行,一个整数n。

【输入样例】
1
【输出样例】
2

问题相关代码,请勿粘贴截图

一,
#include
using namespace std;
int main()
{
int k,n;
float s=0;
cin>>k;
for(n=1;s<=k;n++)
{
s+=1.0/n;
}
cout<
return 0;
}
二,
#include
using namespace std;
int main()
{
int k,n;
double s=0;
cin>>k;
for(n=1;s<=k;n++)
{
s+=1.0/n;
}
cout<
return 0;
}

运行结果及报错内容

一,

未通过

测试点 结果 内存 时间
测试点1 答案正确 604KB 1MS
测试点2 答案正确 604KB 2MS
测试点3 答案正确 604KB 1MS
测试点4 答案正确 596KB 1MS
测试点5 答案正确 604KB 2MS
测试点6 答案正确 604KB 2MS
测试点7 答案正确 604KB 2MS
测试点8 答案错误 596KB 2MS
测试点9 答案错误 600KB 4MS
测试点10 答案错误 604KB 9MS

二,

通过

测试点 结果 内存 时间
测试点1 答案正确 588KB 1MS
测试点2 答案正确 580KB 2MS
测试点3 答案正确 588KB 2MS
测试点4 答案正确 592KB 2MS
测试点5 答案正确 588KB 2MS
测试点6 答案正确 584KB 1MS
测试点7 答案正确 588KB 2MS
测试点8 答案正确 576KB 2MS
测试点9 答案正确 580KB 5MS
测试点10 答案正确 588KB 9MS

我的解答思路和尝试过的方法

如上一,二

我想要达到的结果

明白单,双精度差别


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int k,i;
    double sn=0;
    cin>>k;
    for(i=1;i<=1835421;i++)
     {
         sn=sn+1.0/i;
         if(sn>k)
         {
          cout<<i<<endl;
         break;
        }
     }

    return 0; 
}

https://blog.csdn.net/m0_66603329/article/details/126304097
(可以看看我这道题的题解)