2 joyce1995 Joyce1995 于 2016.01.31 10:57 提问

这道简单的编程题里,为啥运行结果会是这个?

图片说明
以上题,结果是怎么出来的呢??

老师说for的嵌套循环语句时一笔带过,之前重点讲了道for的例题,
图片说明
但我发现,用这道例题的逻辑去思考嵌套循环语句,完全行不通嘛!im crazy!!求好心人解答...

8个回答

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2016.01.31 19:44
已采纳

其实,我觉得你应该是不会看内外层的嵌套,一般都是从最内层开始看 ,

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仔细看一下就会了,即便是我在分析,如果不看的你的图说,也还是可能做错的,

总看看就不会出错了~~~希望对你有用

qq_27183003
qq_27183003   Ds   Rxr 2016.01.31 11:17
Joyce1995
Joyce1995 这个网址里的知识点很好地解释了第二张图的运行逻辑,关键是第一张图里的题,我不知道什么意思啊
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2016.01.31 15:03

这程序很正确啊,这就是循环嵌套。外侧循环每执行1次,内侧就执行2次。最外侧的1次,最内侧就是8次。你单步运行下就知道了。

u012140536
u012140536   2016.01.31 11:04

每个for循环都需要花括号

qq_31122105
qq_31122105   2016.01.31 12:00

For循环先执行最里面的,这里也就是k的那层,执行一次for循环,打印一次i,j,k第一次打印也就是000,第二次k+1, i,j都为0,所以为001 ,再次执行时,执行for循环的j,然后是k,所以,i,j,k分别为010,011……

Joyce1995
Joyce1995 000 001 理解了。为什么接下来不是011呢?运行逻辑能讲仔细点吗?拜托啦!
2 年多之前 回复
u012061345
u012061345   2016.01.31 12:11

这不是很正常嘛。用for语句执行的逻辑去推导。

xianfajushi
xianfajushi   2016.01.31 14:58

爱动脑筋的人和我一起玩自动嵌套,或许理解和控制循环量更容易理解,
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*/
Joyce1995
Joyce1995 OMG!!新手表示更晕了。。。
2 年多之前 回复
xianfajushi
xianfajushi 既可以从最前也可以从最后还可以玩花样从任何层做最深嵌套层
2 年多之前 回复
91program
91program   Ds   Rxr 2016.01.31 13:21

sum=0 完全可以放在 for 语句之前,因为它是在 for 的初始化部分,也只执行一次。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
pat L1-012. 计算指数
真的没骗你,这道才是简单题 —— 对任意给定的不超过10的正整数n,要求你输出2n。不难吧? 输入格式: 输入在一行中给出一个不超过10的正整数n。 输出格式: 在一行中按照格式“2^n = 计算结果”输出2n的值。 输入样例: 5 输出样例: 2^5 = 32 脑补一下位运算,别人一行代码就出来的的题我还傻了吧唧的用打表还自以为很高效,时间的差距一下子就出来了,
又一道简单题
又一道简单题 Time Limit: 5000MS Memory Limit: 65535KB 64bit IO Format: SubmitStatusDescription 输入一个四个数字组成的整数 n,你的任务是数一数有多少种方法,恰好修改一个数字,把它 变成一个完全平方数(不能把首位修改成 0)。比如 n=7844,有两种方法:3844=62^2和 7744=8
ACM天梯赛练习L1-012. 计算指数
真的没骗你,这道才是简单题 —— 对任意给定的不超过10的正整数n,要求你输出2n。不难吧? 输入格式: 输入在一行中给出一个不超过10的正整数n。 输出格式: 在一行中按照格式“2^n = 计算结果”输出2n的值。 输入样例: 5 输出样例: 2^5 = 32 水题,上代码: #include #include int main
CCCC/GPLT L1-014 简单题
题目重现这次真的没骗你 —— 这道超级简单的题目没有任何输入。你只需要在一行中输出事实:“This is a simple problem.”就可以了。题解这跟Hello, World 差不多。代码示例#include <iostream> int main() { std::cout << "This is a simple problem."; return 0; }
教主们:虽然这道题我不会,但Ac还是没问题的。
wywcgs:亦称Lord Wu,俗名吴垠,2009级厦门大学智能科学与技术学院研究生,本科就读于哈尔滨工业大学。因其深厚的算法功底与独到的思维方式,被尊为“吴教主”,至今声威犹存。2006年起参加ACM/ICPC竞赛,获得分别获得上海、西安、长春三枚区域赛银牌。2008年获得GCJ-BeiJing Onsite参赛资格,并在比赛中表现优异,获得Final资格,后因个人原因,推掉了总决赛资格,并忙
团体程序设计天梯赛-练习集L1-014. 简单题
L1-014. 简单题 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 这次真的没骗你 —— 这道超级简单的题目没有任何输入。 你只需要在一行中输出事实:“This is a simple problem.”就可以了。 1 #include 2 usi
【poj1201】Intervals
DescriptionYou are given n closed, integer intervals [ai, bi] and n integers c1, …, cn. Write a program that: reads the number of intervals, their end points and integers c1, …, cn from the standar
ACM天梯赛练习L1-014. 简单题
这次真的没骗你 —— 这道超级简单的题目没有任何输入。 你只需要在一行中输出事实:“This is a simple problem.”就可以了。 。。。上代码: #include #include int main(int argc, char *argv[]) { printf("This is a simple problem."); return 0; }
LibreOJ #6165. 一道水题
题目描述 一天,szb 在上学的路上遇到了灰太狼。 灰太狼:帮我们做出这道题就放了你。 szb:什么题? 灰太狼:求一个能被 [1,n]内所有数整除的最小数字,并对 100000007 取模。 szb:这题太水了,就让我小弟来做好了。 然后你就光荣的接受了这个任务。 输入格式 一行一个数 nnn。 输出格式 一行一个数 ans。 样例 样例输入 10 样例输出 2520
难道这个才是真的?
哎!!!  新手上路就是难啊