为啥一个过一个不过,求助大佬!

P1035 [NOIP2002 普及组] 级数求和

KZ11z @ 2018-10-05 11:14:51

#include <bits/stdc++.h>
using namespace std;
int main() 
{
    int n=1,k;
    cin>>k;
    for(double Sn=0;Sn<=k;n++)
    Sn=1.0/n+Sn;
    cout<<n;
}

为什么不对 感觉和下面的没区别啊

#include<cstdio>
int main() {
    int k,n=0;
    scanf("%d",&k);
    for(double Sn=0;Sn<=k;++n,Sn+=1.0/n);
    printf("%d",n);
    return 0;
}

by Yoo_ @ 2018-10-05 11:20:01

初始n的变量不一样啊


by KZ11z @ 2018-10-05 11:22:49

@我的智商贼低 他是++n 我是n++


by Yoo_ @ 2018-10-05 11:25:21

没仔细看。。。 你试着改动点东西看看是哪步的问题


by KZ11z @ 2018-10-05 11:28:02

@我的智商贼低 试了很多次,不然我也不敢找大佬帮忙啊......


by Yoo_ @ 2018-10-05 11:31:30

应该是循环那里的问题


by jeffqi @ 2018-10-05 11:39:53

在你的代码中 ++n 改成 n++ 没什么区别


by jeffqi @ 2018-10-05 11:40:24

所以应该是 n 的初值的问题


by 冰峰 @ 2018-11-18 10:29:31

Emmm…

#include<iostream>
using namespace std;
int main(){
    int n=0,k;       //计数器,目标数字 
    double Sn=0;     //式子的值
    cin>>k;          //输入k值
    while(Sn<=k){    //当Sn的值不大于k的值时进行循环
        n++;         //每次循环,将分母的值+1;
        Sn=Sn+(1.0/n);
       //给Sn加入一个项,该项的分母比前一项大1。
    }
    cout<<n;         //Sn>k后,跳出循环,输出n值
    return 0;
} 

|