[c++]循环几次?

这几题怎么做

    for(i=0,j=5;i=3;i++,j--) 

    带着i=0,j=5初始值进入循环先判断i=3是否成立,不成立直接退出循环,

    但这里i=3是赋值语句,所以此循环是死循环;

    for(i=1;i++<4;)

    每次判断后不管是否成立i都会+1,所以当i=4不成立,但i仍然会+1,所以i=5(你的答案有误吧,我如图做了测试);

    while(i=0) i--;

    while语句里是个赋值语句,所以始终为true,死循环。原题括号int i=0,编译器应该不会通过,重复定义了。

    请点击输入图片描述

追问

上面的都是错误答案😐

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-10-27
第一个,因为条件是i=3,这个永远是true,所以是无限循环,选D
第二个,for循环先判断条件,而i++是判断之后再执行加1,第一次i为2,第二次i为3,第三次i为4,所以循环次数为3,选C
第三个,就不用说了,因为赋值为0,条件为,假,没有循环,选D追问

第二题是问i等于多少

追答

哦,是,抱歉,没仔细看。第三次i为4,第四次的判断后加1退出,所以应该等于5,选D

追问

谢谢

本回答被提问者采纳
第2个回答  2020-10-27
你可能说的是循环嵌套层数太多了导致算法时间复杂度太大。

缩减时间咋办?当然是优化算法喽,让算法不需要那么多循环嵌套。
一个典型的例子:给定一正整数 n ,找出所有和为 n 的勾股数三元组 (a, b, c) (a < b < c) 。
你很可能直接上三层循环,a 从 1 到 n/3 ,b从 1 到 n/3 ,c 从 1 到 n/3 ,途中做个判断剪个枝。
这样一来你算法的时间复杂度就是 O(n^3) ,搞个 n = 100000 你时间铁定会超。
你想 c = n-a-b ,能少一层循环,时间复杂度成了 O(n^2) 。搞个 n = 10000000,你时间还是有可能超。
这题算法能再简化亿点。考虑到:
a*a + b*b = c*c
a*a = c*c - b*b
a*a = (c+b)*(c-b)
a*a = (n-a)*(n-a-2b)
a*a/(n-a) = n-a-2b
2b = n-a - a*a/(n-a)
b = [(n-a) - a*a/(n-a)] / 2
你把 a 和 n 代进去算出来不是正整数就可以弃了。
现在,你只需要一层循环了。
题主还有可能想问的是循环层数不变,如何减少每层的循环次数。这就要谈到剪枝了。循环过程中,你发现这一支已经不可能满足题意了,就不用再进行下一层循环了,避免不必要的计算。这是剪枝。你甚至可以依据题意调整循环变量的取值范围。
然而剪枝不能改变你算法的时间复杂度。剪枝只能将计算量减少某个常数倍(不过好的剪枝能让计算量减少得非常可观)。追问

答非所问

第3个回答  2020-10-27
第一题,由于for的循环判断的条件是 i=3,是一个赋值语句。赋值语句运行后的返回值,就是赋的值,所以i=3运行后值是3,为true,所以是死循环。答案选D
第二题。还是for循环,条件是:i++<4,每次判断i都会加1. 当 i 等于4的时候,条件不成立,i继续加 1 后终止循环,最后i的值是5,答案选D
第三题:while循环。条件又是一个赋值语句,int i=0 赋值语句的返回值是赋的值,是0,是false,所以while循环一次都不运行。答案是D,0
相似回答