求解(c++)

P1035 [NOIP2002 普及组] 级数求和

不考400不改名 @ 2021-08-05 11:24:02

这题简简单单

TLE了 直接奉上代码

#include<iostream>
using namespace std;
int main(){
    int k,s=0,n=1;
    cin>>k;
    while(s<k){
        s+=1/n;
        n++;
    }
    cout<<n;
    return 0;
}

by Wildcxj @ 2021-08-05 11:25:40

这个肯定啊1/n除了第一次就肯定是0啊。。。。。。


by _caiji_ @ 2021-08-05 11:26:02

整数除法 -> 浮点数除法


by 不考400不改名 @ 2021-08-05 11:26:18

@Terrible 能过,完全能过,只是超时,需要一个优化解


by Terrible @ 2021-08-05 11:27:25

并不只是超时的问题,你这个程序就不会停机。

TLE是程序不给你算了,不是结果对,时间超了。


by Terrible @ 2021-08-05 11:27:55

#include <cstdio>
int main()
{
    double S=0;int K,i=0;
    scanf("%d",&K);
    for(i=0;S<=K;){i++;S+=1/double(i);}
    printf("%d",i);
}

这是我当年的代码。


by 不考400不改名 @ 2021-08-05 11:28:15

@Wildcxj 定义的n=1,所以s不等于0,只是超时了,示例数据是能过得


by spdarkle @ 2021-08-05 11:28:15

@不考400不改名 开double试试,而且你这个绝对错误,C++是int除法自动向下取整,意思就是你这个1/n每一次都是0,就等于死循环


by 不考400不改名 @ 2021-08-05 11:28:57

@Terrible 受教了,谢谢


by spdarkle @ 2021-08-05 11:29:47

只有第一个1/n,n==1的时候才除出来一个1,n大于1之后每次除法都是0


by Jorisy @ 2021-08-05 11:30:34

@不考400不改名 第一次是1,从第二次开始,每次加0


| 下一页