c-循环写法为什么输出值不同,求自然数立方和大于1000000时的值

问题描述

循环写法为什么输出值不同,求自然数立方和大于1000000时的值

1.main()
{
int i, sum = 0;
for (i = 1; sum < 1000000; i++)
{
sum = sum + i*i*i;
}
printf("%d",i);
system("pause");
}
输出46

2.main()
{
int i, sum = 0;
for (i = 1; ; i++)
{
sum = sum + i*i*i;
if (sum > 1000000)
{
break;
}
}
printf("%d",i);
system("pause");
}
输出45

3.main()
{
int i;
int sum = 0;
bool b = false;
for (i = 0; !b; i++)
{
sum = sum + i*i*i;
b = sum > 1000000;
}
printf("当i为 %d 时,其立方和大于1000000", i);
system("pause");
}
输出46
4.main()
{
int i;
int sum = 0;
bool b = false;
for (i = 0; !b; i++)
{
b = sum > 1000000;
sum = sum + i*i*i;

}
printf("当i为 %d 时,其立方和大于1000000", i);
system("pause");

}
输出47

5.书上给的源码是这个,不明白为什么i--
main()
{
int i, sum = 0;
for (i = 1; ; i++)
{
sum = sum + i*i*i;
if (sum > 1000000)
{
break;
}
}
i--;

printf("%d",i);
system("pause");
}

解决方案

这个问题就是for(初始化;条件;调整)语句的执行顺序,第一次顺序:初始化->条件->语句;第二次顺序:调整->条件->语句;第三步顺序:调整->
条件->语句......最后一步也是一样。
1中最后一步从上一步得到i=44,i++,sum1000000,但是接下来的是调整,i++,所以i=46;
第2个就显而易见了,i=44时sum<1000000所以不会跳出,输出i=45
第3个和第1个一样
第4个明显i=44时,b=0;再循环一圈i=45时,b=0;在循环一圈i=46时,b=1继续执行下面的语句,然后进行调整i++得到47在进行!b判断。

解决方案二:

减去1 ,是因为最后一次的计算结果 大于 1000000 时已经不满足题目的要求,要减去它。

解决方案三:

这里主要看“退出条件”
如果第一个i, sum + i * i * i >= 1000 , 这个i到底算不算

解决方案四:

sum + i * i * i >= 1000 , 应该是这样。

解决方案五:

1.main()
{
int i, sum = 0;
for (i = 1; sum < 1000000; i++)
{
sum = sum + i*i*i;
}
先i++,然后判断sum < 1000000是否为true,这样即使 sum == 1000000 , 会i++,然后sum == 1000000 为true退出,这样显然i多加了
其他类似分析,不同的是break之后直接跳出循环,不执行i++

最后一个显然错了

最后一个输出44,而实际上是45

n个数的立方和公式n^2 * (n+1)^2 / 4

时间: 2024-09-17 04:02:04

c-循环写法为什么输出值不同,求自然数立方和大于1000000时的值的相关文章

struts2-这段代码的错误在哪里,id属性的值为空,但是控制台能输出所有的value值,求大神解答??

问题描述 这段代码的错误在哪里,id属性的值为空,但是控制台能输出所有的value值,求大神解答?? <s:form action=""deleteMessageAction"" method=""post""> <table align=""center"" width=""40%"" border=""5&

请问这段代码为什么输出null,求大神解答程序执行的顺序?

问题描述 请问这段代码为什么输出null,求大神解答程序执行的顺序? public class xieCheng { private String baseName="Base"; public xieCheng(){ this.callName(); } public void callName(){ System.out.println(baseName); } } public class Sub extends xieCheng { private String baseNam

c语言简单输出问题,求指导

问题描述 c语言简单输出问题,求指导 #include <stdio.h>#include <stdlib.h>main (){ int a=6b=7; printf(""%d%dn""ab); { int b=10; printf(""%d%dn""ab); } printf(""%d%dn""ab);} 输出结果是:6,7 6,10 6,7我不明白为什么打三个

获取数据-有人用FlexiGrid 吗?为什么IE不能获取到制定列的值?求帮助哇~~~

问题描述 有人用FlexiGrid 吗?为什么IE不能获取到制定列的值?求帮助哇~~~ 火狐能获取到数据,IE就获取不到,弹出cell[索引]是未定义,怎么解决呢?

算法 数据结构 图论-如何求一个连通图的具有最小权值的生成子图!

问题描述 如何求一个连通图的具有最小权值的生成子图! 如何求一个连通图的具有最小权值的生成子图!算法如何?不通要过穷举,如何进行选边?有没有好算法!

select-mysql 嵌套查询,一个表的多个字段 作为另一个表的条件,若为空输出0,求高手

问题描述 mysql 嵌套查询,一个表的多个字段 作为另一个表的条件,若为空输出0,求高手 SELECT daan FROM 表A a,表B a WHERE daan=b.选项1 or daan =b.选项2 问题来了 若 从表A 查 表B的选项,daan为空,怎么输出0 解决方案 首先得搞明白select daan 就是这一列 为空,输出0属于计数,可以用函数 这两个并不能写一起 解决方案二: 可以使用case when阿 SELECT case when rtrim(daan) ='' th

fragmentactivity-当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例

问题描述 当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例 当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例 解决方案 很多方法,handler或者发送广播都可以 解决方案二: 使用eventbus进行通讯 解决方案三: 1.Fragment是依托于Activity的所以 2.在Fragment的生命周期方法中可以调用getActivity();方法 3.通过此方法获得当前Frag

图片-初学小女子求问一个关于矩阵,中值滤波题目

问题描述 初学小女子求问一个关于矩阵,中值滤波题目 目前用的是VS2010,所以希望是C语言~多谢喇 望各方大神快快冒泡,解小女子一惑o(^▽^)o 解决方案 不是告诉你算法了么?就是用某个点周围8个点按照第二个矩阵的泉重求平均数,作为滤波后的值. 解决方案二: 打个比方,第二排第二个元素158,滤波以后等于多少呢? 我们看它和它四周的9个元素,是不是 160 163 167 159 158 155 153 155 157 和Mask每一项相乘相加再除以16 等于 (160*1+163*2+16

求解决-这个代码为什么输出不对呢求大神指教

问题描述 这个代码为什么输出不对呢求大神指教 #include #include /** 本题要求计算给定的一系列正整数中奇数的和. 输入格式: 输入在一行中给出一系列正整数,其间以空格分隔.当读到零或负整数时,表示输入结束,该数字不要处理. 输出格式: 在一行中输出正整数序列中奇数的和. 输入样例:8 7 4 3 70 5 6 101 -1 输出样例:116int main(){ int a[80]; int ic = 0; int sum=0; for(i=0; ; i++) { scanf