MrKeanu @ 2020-02-17 11:40:19
第一次是用for语句写的循环体,结果怎么都不对,但是用while语句写就对了,这是什么原因呢?
楼下附上源代码。
for语句:
#include<stdio.h>
int main(){
int n,k;
double s=0.0;
scanf("%d",&k);
for(n=1;s<=k;n++){
s =s+ 1.0/n;
printf("%d",n);
return 0;
}
while语句:
#include<stdio.h>
int main(){
int n,k;
double s=0.0;
scanf("%d",&k);
while(s<=k){
n++;
s+=1.0/n;
}
printf("%d",n);
return 0;
}
by pocafup @ 2020-02-17 11:48:14
@iTwinkle 好吧没说清楚
by Program404 @ 2020-02-17 11:48:56
@MrKeanu 你的for循环右括号去哪了
初始化的时候应该n = 0
啊
by SIXIANG32 @ 2020-02-17 11:51:40
@MrKeanu 请问您接触c++多少年了,学过一年的人都应该知道for是先加在判断,while是先判断在执行循环体,do-while是先执行循环体在判断。
by SIXIANG32 @ 2020-02-17 11:52:51
@Program404 也可以是1啊,我这种初学者平时都喜欢赋1,也差不多啦,反正多加一个数组又不会MLE
by SIXIANG32 @ 2020-02-17 11:53:37
@MrKeanu 您是CE了吧,右花括号没了想WA都难。
by SIXIANG32 @ 2020-02-17 11:55:29
@MrKeanu 哦,我知道您为什么不对了,for应该写无条件循环,我就是写无条件的,AC了。他不一定是<=k的。
by Zyque @ 2020-02-17 11:58:58
@SIXIANG 人家初学的吧
by _脑波_ @ 2020-02-17 11:59:21
最后结束了还有一次n++
by iTwinkle @ 2020-02-17 11:59:34
@MrKeanu 给个我觉得比较实用的建议:以后实数类型的计数器把精度开大一点,当然这里一位也可以,但这样可以有效避免大部分的精度不足而WA了
by iTwinkle @ 2020-02-17 12:03:51
@SIXIANG 请不要误导别人或者话只说一半,无条件循环后面还要多一个if判断+break(否则死循环),这你没有说。即便对了,这样是多此一举,还不如直接while来的安稳