回 帖 发 新 帖 刷新版面

主题:为什么总算不出正确答案??

int max()
{int i,sum;
sum=0;
for(i=0;sum<1000;i++)
sum=i*i+sum;
return i;
}
main()
{int n;
n=max();
printf("%d\n");
}
我本意想使用这个程序求算出
当1*1+2*2+3*3+……+n*n<1000时,n的最小值
可是答案是15
而正确的应该是13
这是为什么??

回复列表 (共10个回复)

沙发


Help me 一下大哥大姐~~~~

板凳

这个问题蛮有趣 首先你返回的条件只能返回14而不会是13
然后我在单步执行的时候 发现在for语句在不满足条时跳出时 i还会加一
问就出在这了 我也不太了解 会不会是自右向左的规则呢
但可以用do-while
#include <stdio.h>
int max()
{
int i=0,sum=0;

    /*for(i=1;sum<1000;i++)
    {sum=i*i+sum;
    n=n+1;}*/
do
{  
           i++;
    sum=i*i+sum;
}while(sum<1000);
return (i-1);
}
void main()
{
     printf("%d\n",max());
}

3 楼

自己做的网页要运行前要改浏览器里什么东西?

4 楼

谢谢拉~~~~~
自右向左不是在printf语句中才有么
for语句也有??

5 楼

[size=4]

[/size]

6 楼

[size=4]因為 i=13時 sum<1000 循環條件滿足,所以繼續
然後計算sum=14*14+sum;
計算完之後,i++,然後判斷循環條件不滿足退出
[/size]

7 楼


int max()
{int i,sum;
sum=0;
for(i=0;sum<1000;i++)    

  \*错误在这里,假如已经是加到了i=13,此时sum=819,然后电脑就会继续运行i++,然后进行对sum<1000的选择,结果是sum<1000,然后执行sum=i*i,然后再运行i++,然后电脑再进行判断,结果sum>1000,所以循环及结束,所以你的结果是多了2,应该减了那个2才对*\

sum=i*i+sum;
return i-2;
}
main()
{int n;
n=max();
printf("%d\n",n);    \*这不要丢了n*\
}


 

8 楼

照楼上说,最后一次循环应该是14而不是15啊
i=14的时候循环已经停止,i应该不会再自增了才对啊
为什么结果是15呢?

9 楼

当循环条件满足时,应该是14
然后输出的时候在减1就行了
        

10 楼

[quote]谢谢拉~~~~~
自右向左不是在printf语句中才有么
for语句也有??[/quote]


for 语句可以用downto,
表示从大到小

我来回复

您尚未登录,请登录后再回复。点此登录或注册