为什么只得了60分,输入14就不对了,向大佬求助

P1035 [NOIP2002 普及组] 级数求和

hjgfshecvyua @ 2020-12-23 11:12:01

#include<stdio.h>
int main()
{
    int n,k;
    float sum=0.000000;
    scanf("%d",&k);
    for(n=1;n<=100000;n++)
    {
        sum+=(1.0/n);
        if(sum>k)break;
    }
    printf("%d",n);
    return 0;
 } 

by w23c3c3 @ 2020-12-23 11:14:52

@hjgfshecvyua n的范围到2e6就能过了
调和级数就和是大概\ln n


by _红_ @ 2021-02-19 20:48:00

#include<bits/stdc++.h>//万能头文件
using namespace std;
double x;
int s,i;
//把变量定义成全局变量,变量一开始值都是0
int main(){
    cin>>s;//输入
    for(i=1;;i++){
        x=x+1.0*1/i;//累加
        if(x>s)break;//达到条件后就可以退出循环了
    }
    cout<<i;
    return 0;//爆零才不加return 0;
}

这是我的代码


by Wobuxing @ 2021-04-23 19:22:17

建议递归,以空间时间

#include <cstdio>
int k;
int main() {
    void s(int n);
    scanf("%d",&k);
    s(1);
    return 0;
}

void s(int n) {
    double ans=1;
    for (int i=2;i<=n;++i) ans += 1.0/i;
    if (ans > (double)k) {printf("%d",n);return;}
    else s(n + 1);
    return;
}

试试不一定能过


|