请问各位为什么是0分

P1035 [NOIP2002 普及组] 级数求和

冬天的海獭 @ 2018-03-28 10:19:25

include <stdio.h>

int main() { int K,N; float Sn,x; scanf("%d",&K); Sn=0; x=1; N=0; while(Sn<=K){ Sn=Sn+x; N++; x=1/N; } printf("%d\n",N); return 0; }


by Ervin @ 2018-03-28 10:57:00

#include <stdio.h>

int main() 
{
 int K,N; 
 float Sn,x; 
 scanf("%d",&K);
 Sn=0;
 x=1; 
 N=1; 
 while(Sn<=K)
 { 
    N++; 
    x=1.0/N; 
    Sn=Sn+x;
 } 
 printf("%d\n",N); 
 return 0; 
}

首先x和N初始不应该是1和0,否则Sn就加了两个1,不过可以都是1,或者都是0,

其次while中求x的时候,必须加上一个".0"不然求出来的就会是后边的式子向下取整,所以x一直都是零,然后就跑不出来了,

我上边给你改了改你的程序,你看看对不对,如果还有问题尽管问我


by 冬天的海獭 @ 2018-03-28 16:52:33

@Ervin 哦谢谢,我明白那个1.0的问题了。 赋初值的问题的话,while循环里我的语句顺序和你是不一样的,所以也没有问题了,不过你的更清楚不容易出错。 但是。。。我按你的改过之后还是0分呀。。。


by Ervin @ 2018-03-28 16:55:51

啊。。。这就尴尬了,我再看一下啊@冬天的海獭


by Ervin @ 2018-03-28 17:01:21

哇咔咔,我发现了哎,,,我改的时候刚开始测试没有问题,结果后来把while的顺序换了一下,N没有改成0,改成0就对了!!!

#include <stdio.h>

int main() 
{
 int K,N; 
 float Sn,x; 
 scanf("%d",&K);
 Sn=0;
 x=1; 
 N=1; 
 while(Sn<=K)
 { 
    N++; 
    x=1.0/N; 
    Sn=Sn+x;
 } 
 printf("%d\n",N); 
 return 0; 
}

@冬天的海獭


by Ervin @ 2018-03-28 17:02:56

咳咳咳,再发一遍哈

#include <stdio.h>

int main() 
{
 int K,N; 
 double Sn,x; 
 scanf("%d",&K);
 Sn=0;
 x=1; 
 N=0; 
 while(Sn<=K)
 { 
    N++; 
    x=1.0/N; 
    Sn=Sn+x;
 } 
 printf("%d\n",N); 
 return 0; 
}

突然又发现一处,这道题可能double比较好一点,有可能会有误差吧,反正我用的double,你可以用float试试,这样就对了,我刚才测试了。。


by 冬天的海獭 @ 2018-04-01 09:50:48


by 冬天的海獭 @ 2018-04-01 09:51:26

@Ervin 对了我自己测试的时候用float到15的时候程序就不能运行了,可能这也是一个错误的地方,谢谢了


by Ervin @ 2018-04-01 09:56:50

@冬天的海獭 没事没事,不用谢,最好用double一般不用float,^_^


|