问题描述
- 这道简单的编程题里,为啥运行结果会是这个?
-
以上题,结果是怎么出来的呢??老师说for的嵌套循环语句时一笔带过,之前重点讲了道for的例题,
但我发现,用这道例题的逻辑去思考嵌套循环语句,完全行不通嘛!im crazy!!求好心人解答...
解决方案
其实,我觉得你应该是不会看内外层的嵌套,一般都是从最内层开始看 ,
i j k
所以一上来就是000 001
之后k都循环完了,再往外就是j = 1 的情况,而这时候i = 0
所以结果是 010 011 以此类推
j的情况结束了,i = 1 情况就要开始了
而j k 还是要从0 开始算 ,所以是
1 0 0 1 0 1
注意此时变化的依然是最内层,所以 接下来就是
j = 1 的变化
1 1 0 1 1 1
,你要用debug仔细看一下就会了,即便是我在分析,如果不看的你的图说,也还是可能做错的,
总看看就不会出错了~~~希望对你有用
解决方案二:
这个讲得详细点。
http://www.360doc.com/content/12/0107/09/8486771_177824230.shtml
解决方案三:
这程序很正确啊,这就是循环嵌套。外侧循环每执行1次,内侧就执行2次。最外侧的1次,最内侧就是8次。你单步运行下就知道了。
解决方案四:
每个for循环都需要花括号
解决方案五:
For循环先执行最里面的,这里也就是k的那层,执行一次for循环,打印一次i,j,k第一次打印也就是000,第二次k+1, i,j都为0,所以为001 ,再次执行时,执行for循环的j,然后是k,所以,i,j,k分别为010,011……
解决方案六:
这不是很正常嘛。用for语句执行的逻辑去推导。
解决方案七:
爱动脑筋的人和我一起玩自动嵌套,或许理解和控制循环量更容易理解,
string 字符串 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int 量 = 字符串.Length, 跟 = 0, 定 = 3, 嵌套量 = 量 - 定;
int[] 无限嵌套 = Enumerable.Range(定, 嵌套量).ToArray();
do
{
foreach (int 元 in 无限嵌套)
{/*逐级运算*/
if (元 < 0)
{
if (跟 + 1 >= 嵌套量) break;/*数组最后元素小于0时*/
--无限嵌套[跟 + 1];
无限嵌套[跟] = 定 + 跟;
}
++跟;
}
if (无限嵌套[嵌套量 - 1] >= 0)
Console.WriteLine(string.Join(" ", 无限嵌套));
--无限嵌套[0];
跟 = 0;
} while (无限嵌套[嵌套量 - 1] >= 0);
string 字符串 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 输出 = "";
int 量 = 字符串.Length, 跟 = 量;
int[] 无限嵌套 = Enumerable.Repeat(0, 量).ToArray();
do
{
while (--跟 >= 0)/*逐级运算*/
if (无限嵌套[跟] >= 量)
{
if (跟 - 1 < 0) break;/*防止越界*/
++无限嵌套[跟 - 1];
无限嵌套[跟] = 0;
}
if (无限嵌套[0] < 量)
//Console.WriteLine(string.Join(" ", 无限嵌套));
foreach (int aa in 无限嵌套)
输出 += 字符串[aa].ToString();
Console.WriteLine(输出);
++无限嵌套[量 - 1];
跟 = 量; 输出 = "";
} while (无限嵌套[0] < 量);
/*多年前的想法,今天终于实现了,自动嵌套循环的算法,从此不再局限于固定的嵌套循环,以后都可以使用动态的嵌套循环。2016年1月25日10:05*/
解决方案八:
sum=0 完全可以放在 for 语句之前,因为它是在 for 的初始化部分,也只执行一次。