张世来4610484 发表于 2020-2-15 20:06:40

问题求助

题目:求偶数之和,并输出累加和不超过10000的偶数及其前面的偶数之和。我知道自己错了,但是想不通我这错在哪,求指点迷津!
我写的代码如下
#include <stdio.h>
void main ()
{
        int i,sum=0;
        i=2;
        while(sum<=10000)
        {sum=sum+i;
        i=i+2;}
        sum=sum-i;
        i=i-2;
        printf("%d%d",i,sum);
}

正确答案如下:
#include <stdio.h>
void main ()
{
        int i,sum=0;
        for(i=2; ; i+=2)
        {
                sum =sum+i;
                if(sum>10000)
                {
                        sum=sum-i;//恢复到上一次的sum和i,保证sum在10000以内
                        i=i-2;
                        break;       
                }
        }
        printf("%d%d",i,sum);
}

shark1996 发表于 2020-2-15 21:03:40

你的i多加了一次,试试sum<10就知道了

4goodworld 发表于 2020-2-15 21:47:08

本帖最后由 4goodworld 于 2020-2-15 21:48 编辑

int i,sum=0;
      i=2;
      while(sum<10000)
                {
                        sum=sum+i;
                        i=i+2;
                }
                sum=sum-i+2;
      i=i-4;
      printf("%d%d",i,sum);

按照你的写法的正确解法
你的问题是
我们先假设i=某值,sum=10000,请注意,是当i=某值,sum=10000?不是的,是i=某值-2才对,你看下你的循环体,当sum=10000时,i又加了+2,简单讲,你所求的“i”=某值-2,sum=10000
继续看下去,按照你设置的程序,sum=10000还要继续执行while
那么
sum=sum(10000)+i(某值)
i=i(某值)+2
你设想下,离开while循环体,你的sum的值=10000+某值,而i=某值+2,
请问你要返回的效果是什么?
sum=10000 然后对应的i
现在呢?
sum实际是=10000+某值
某值怎么来,当前的i-2,
那么,最关键的问题你求的“i”应该是多少?
请往上翻看下
“i”=某值-2
某值=i-2
所以“i”=(i-2)-2=i-4
可能有点绕,请自己理解理解
这些小例子都是一些数学逻辑大于编程本身的,请注意提高自己的数学思维,做题前不妨用笔自己打打草稿,会更好!



张世来4610484 发表于 2020-2-20 13:04:09

4goodworld 发表于 2020-2-15 21:47
按照你的写法的正确解法
你的问题是
我们先假设i=某值,sum=10000,请注意,是当i=某值,sum=10000?不 ...

看懂了,谢谢,回答的很好,不过没来得及确定最佳答案,系统自动设置了,下次给你补上,不好意思哈
页: [1]
查看完整版本: 问题求助