因为你加总在前面,自加1在后面,然后再判断小于等于500.所以需要减一
也就是说当你到loop while S这里loop while S<=500时,加下一个i>500,不就满足1+2+3+···+n>500的最小自然数n?可是你S=S+i在前面啊你要了解顺序。doS=S+i'这里的i才是你要找的n值,假如我叫这个i为i1i=i+1'这里的i 已经加一了 ,假如我叫这个i 为i2loop while s<=500'这里判断的s是没有加1之前的也就是i1然后现在程序跳出循环体,输出数据,你判断的S是用i1做判断的,可是i现在的值是i2的值所以需要输出i-1补充一下吧:doS=S+i'假如说你求的n值为31,现在i=31i=i+1'到这里i=32loop while s<=500'这里判断的S是1+2+3...+31的值如果你直接输出i ,那么i=32,就不是你想要的值了。我能明白你说的,但1+2+3+···+31,这里的"31"是满足1+2+3+···+n<500的最小自然数n,而非题目本身所说:1+2+3+···+n>500的最小自然数n31是满足循环体的,所以循环继续。我算了一下:当n=31时 S=496当n=32时 S=528所以你要找的最小自然数应该是n=32我们再看程序:’=========当i=31时===========================doS=S+i‘这里当i=31时,S=496i=i+1'这里 i=32loop while s<=500这里s=496,所以小于500循环继续。’此时是1+2+3+4+...31<=500‘=========当i=32时===========================doS=S+i‘这里当i=32时,S=528i=i+1'这里 i=33loop while s<=500这里s=528,所以大于500跳出循环。’此时是1+2+3+4+...31>500如果你直接输出,那就是33了所以要自减1