没想明白,为什么n=i-1时是对的而n=i时是错的呢

P1035 [NOIP2002 普及组] 级数求和

hgdhjgj @ 2024-03-10 16:03:26

#include<stdio.h>
int main(){
    int k,n;
    double sum=0;
    int i=1;
    scanf("%d",&k);
    while(sum<k){ 
        sum=sum+(1./i);
        i++; 
        n=i-1;
    }

    printf("%d",n);
    return 0;

by zjh114514 @ 2024-03-10 16:30:55

误差?


by rrrstj @ 2024-04-11 21:12:42

@hgdhjgj 我也不懂,这个简直太抽象了这个题```cpp

include <iostream>

using namespace std;

int main() { double Sn = 0; int k = 0; cin >> k; double n = 1; for (; Sn < k; ++n) { Sn += 1.0 / n; } cout << n - 1; // n减1才是满足条件的最小值 return 0; }


这个是对的我自己写的那个代码反而是错的???我请问呢???

by ruihang @ 2024-04-13 11:52:45

呃......


by AnnaQ @ 2024-04-21 11:50:39

@hgdhjgj 如果把

n=i-1;

i++; 

调换一下顺序也能过,因为i是从1开始的


by AnnaQ @ 2024-04-21 11:52:54

@AnnaQ 然后得把 n=i-1 后边的 -1 删掉


by gwg666 @ 2024-05-03 20:25:24

你随便举个例子就知道,当sum=1+1/2成立时,n等于2,但是因为你的i++在下面,导致i又自增一次,i变成了3,输出3就错了


|