各位大佬为什么错了呢,感觉跟答案差不了多少呀哭

P1035 [NOIP2002 普及组] 级数求和

yameng @ 2019-10-03 22:22:09

include <stdio.h>

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


by t162 @ 2019-10-03 22:22:21

​ 希望更丰富的展现?使用Markdown


by Rainy_chen @ 2019-10-03 22:23:52

N=0时你做了一次Sn=Sn+1.0/N。。。


by awa再也不水贴 @ 2019-10-03 22:36:16

include <stdio.h>
int main() 
{ 
    int N,K; 
    double Sn=0; 
    scanf("%d",&K); 
    for (N=0;Sn<=K;N++) 
        //Sn=Sn+1.0/N; 这里错的
        Sn+=1.0/n;
    printf("%d",N); 
    return 0;
}

by awa再也不水贴 @ 2019-10-03 22:38:13

#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 awa再也不水贴 @ 2019-10-03 22:38:40

所以 你抄的题解 对吧 稍微改了一下


by JasonZRY @ 2019-10-04 08:05:50

#include<stdio.h>
int N,K;
double Sn;
int main(){
    scanf("%d",&K);
    while(Sn<=K)Sn+=1.0/(++N);
    printf("%d",N);
    return 0;
}

by yameng @ 2019-10-07 20:17:32

@xiaojie233a

Sn=Sn+1.0/N; Sn+=1.0/n; 这两个的意思不是一样的么,有什么区别么,新手不懂qwq


by awa再也不水贴 @ 2019-10-16 21:11:04

@yameng (⊙o⊙)…额

好吧

我没看清

认真分析一下

这是你的代码

include <stdio.h>
int main() { 
  int N,K; 
  double Sn=0; 
  scanf("%d",&K); 
  for ( N = 0 ; Sn <= K ; N++) 
        Sn = Sn + 1.0/N;
  printf ("%d",N);
  return 0; 
}

这个是答案

#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;
}

我们再来把化简的答案翻成稍微容易懂得的

#include<cstdio>
int main(){
    int k,n=0;
    double Sn;
    scanf("%d",&k);
    for(Sn=0;Sn<=k;Sn=Sn)//首先循环变量是Sn,你的Sn小于k,不代表n小于k,其他地方基本没有错了!ヾ(◍°∇°◍)ノ゙加油吧!!
    {
        //Sn=Sn纯粹为了把代码写易懂点,简单来说就是什么都不做
        n++;
        Sn=Sn+1.0/n;//这里是没有错的,汗颜...
    }
    printf("%d",n);
    return 0;
}

|