AnGel_Fox @ 2024-12-10 12:16:27
孩子80,最后一个测试点过不去,输入为1,然后代码输出也是1
#include <stdio.h>
#include <stdlib.h>
int main()
{
double n;
scanf("%f",&n);
double s=1,k=2;
while(s<=n)
{
s=s+1/k;
k=k+1;
}
printf("%d",(int)k-1);
return 0;
}
by computer11 @ 2024-12-10 12:56:46
循环中的代码顺序有点错了,改了一下:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
double s=0,k=0;
while(1) {
k++;
s+=1/k;
if(s>n) break;
}
printf("%d",(int)k);
return 0;
}
by programmer330 @ 2024-12-10 12:58:51
@AnGel_Fox
输入
by AnGel_Fox @ 2024-12-11 21:33:50
@computer11好的,谢谢大佬awa,但是还是可以讲解一下吗,具体错哪还是没看懂
by AnGel_Fox @ 2024-12-11 21:35:45
@programmer330我的意思是我的代码输出是一,但是答案是2,讲得有点歧义,抱歉
by computer11 @ 2024-12-15 19:29:15
@AnGel_Fox 这种题中尽量不要提前准备好第一项,让第一项也和其他项一起算会比较好,就不会有什么例外了。
by computer11 @ 2024-12-15 19:36:09
@AnGel_Fox 你是
double s=1,k=2;
和
s=s+1/k;
k=k+1;
这是准备好第一项,先加后移的写法, 但我是
double s=0,k=0;
k++;
s+=1/k;
并且
if(s>n) break;
是将第一项混入了杂群中,并且先移后加,可以避免出现如
by AnGel_Fox @ 2024-12-17 09:58:22
@computer11好的好的,谢谢