为什么跑0分

P1035 [NOIP2002 普及组] 级数求和

luo18226724469 @ 2023-11-07 22:48:10

#include<stdio.h>
int main()
{
    int k,n=1;
    double sn=0.0;
    printf("输入一个k值");
    scanf("%d",&k);
    for(sn=0;sn<k;n++)
    {
        sn+=1.0/n;
    }
    printf("%d",n);
    return 0;

}

by Just_int_mian @ 2023-11-07 22:54:26

你的那句“输入一个k值”也会被算入答案里的......


by luo18226724469 @ 2023-11-08 22:45:18

@int_miannnnn 把那一行删掉就可以了吗,我删了之后还是0分欸


by Just_int_mian @ 2023-11-08 22:59:55

@luo18226724469

还有一点小问题哦

题目求的是 S_n > k 时最小的n

但是因为你的循环条件是 S_n<k ,所以当 S_n = k的时候也会跳出循环,与题意不符。

循环条件应改为 S_n \le k

另外,当你这样写时,n会多计算一次。

如模拟样例计算过程:

初值n=1,S_n=0

跑完一遍得n=2,S_n=1

再跑一遍得n=3,S_n = 1.5

此时n比预期的21,所以应输出 n-1


by luo18226724469 @ 2023-11-09 15:33:05

@int_miannnnn已经过了!谢谢大佬指导!!!这对刚开始学习c语言的我是一种特别大的鼓励!万分感谢!!!


|