主题:为什么总算不出正确答案??
%塔塔%
[专家分:70] 发布于 2008-01-25 12:09:00
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个回复)
沙发
%塔塔% [专家分:70] 发布于 2008-01-28 11:36:00
Help me 一下大哥大姐~~~~
板凳
嗜C如命 [专家分:30] 发布于 2008-01-29 15:15:00
这个问题蛮有趣 首先你返回的条件只能返回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 楼
七米木头人 [专家分:0] 发布于 2008-01-29 15:30:00
自己做的网页要运行前要改浏览器里什么东西?
4 楼
%塔塔% [专家分:70] 发布于 2008-01-30 19:31:00
谢谢拉~~~~~
自右向左不是在printf语句中才有么
for语句也有??
5 楼
nobush [专家分:390] 发布于 2008-02-01 14:53:00
[size=4]
[/size]
6 楼
nobush [专家分:390] 发布于 2008-02-01 14:59:00
[size=4]因為 i=13時 sum<1000 循環條件滿足,所以繼續
然後計算sum=14*14+sum;
計算完之後,i++,然後判斷循環條件不滿足退出
[/size]
7 楼
wangjie5540 [专家分:110] 发布于 2008-02-12 12:01:00
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 楼
accil [专家分:0] 发布于 2008-02-14 18:10:00
照楼上说,最后一次循环应该是14而不是15啊
i=14的时候循环已经停止,i应该不会再自增了才对啊
为什么结果是15呢?
9 楼
无所不能 [专家分:270] 发布于 2008-02-18 13:29:00
当循环条件满足时,应该是14
然后输出的时候在减1就行了
10 楼
无所不能 [专家分:270] 发布于 2008-02-18 13:32:00
[quote]谢谢拉~~~~~
自右向左不是在printf语句中才有么
for语句也有??[/quote]
for 语句可以用downto,
表示从大到小
我来回复