麻烦大佬看看哪里不对

P1035 [NOIP2002 普及组] 级数求和

c0621zy @ 2022-09-06 17:41:20

#include <stdio.h>

int main(){
    double sum=0.0;
    int i;
    int k;
    scanf("%d",&k);
    for(i=1;sum<=k;i++)
{   sum+=1.0/i;
}

    printf("%d",i);
return 0;
}

by LeNotFound @ 2022-09-06 18:01:42

@c0621zy 循环那里改一下

for (i = 1;; i++)
{
    sum += 1.0 / i;
    if (sum >= k)
    {
        break;
    }
}

by c0621zy @ 2022-09-06 20:15:12

@LeNotFound 可以解释一下原来的写法为什么不行吗?


by LeNotFound @ 2022-09-07 01:29:49

@c0621zy
之前的for循环,在sum>k的时候又做了一次i++ for循环在条件不成立的时候 也会执行一行

for(i=1;sum<=k;i++)

其中包含i++操作,所以结果比正解多了1
应该是发现满足立即跳出


by c0621zy @ 2022-09-07 10:52:26

@LeNotFound 明白了,感谢!


|