专栏名称: GBangBang
一个生于浙江慈溪,求学于关外,蜗居过帝都,供职于杭城,现今留于余姚的青年人民教师。
今天看啥  ›  专栏  ›  GBangBang

算法趣事·觉醒循环能力

GBangBang  · 简书  ·  · 2018-09-24 19:37

上一篇小明利用计算机编程的能力,帮助爸爸罗列了所有100元买100只小鸡的方案,小明运用到了简单粗暴的枚举法——列出问题所有的解,然后根据判断条件逐个验证对错。若满足判断条件,则问题解决。否则,问题无解。希望各位小学员们不光理解枚举法,更要将枚举法锲而不舍的劲头保持下去哦!


我们的电脑具备了for循环的能力,能轻而易举的解决一定数量的问题,比如说帮小明罗列出最近10次考试中不合格的成绩,比如说在100个小朋友中找出年龄是偶数的小朋友。但是,for循环的能力远不止于此,就像小明将for循环开发出了更加强力的能力——双重for循环!

觉醒吧!双重for循环,for循环的升级版。在一次for循环的前提下,再度进入循环。再开发强力for循环能力前,我们先来回顾下,for循环的几大核心要素:1.循环变量,记录循环过程中的次数。2.开始循环前,初始化循环变量,从第几次开始循环。3.结束循环时的判断条件,限制循环次数达到某判断条件,结束循环。4.循环过程中,循环变量变化的步数。

【举例:for(i=1; i<=10;i++){}   1.循环变量: 'i'  2.开始循环前, i 初始化为 1。3.结束循环时判断条件,i<=10,超过判断条件则跳出循环。4. i++  循环变量  'i'  步数每次加一。 循环共1,2,3,4,5,6,7,8,9,10,10次】


小试牛刀:打一份经典的9*9乘法表吧!

小提示:9*9乘法表,分别由两个个位数1-9相乘得值的一张表。数字从 1 变到了 9 ,每次加一的步长,交给循环让循环变量去控制做重复的事吧!那么两个 1--9 相乘,何不尝试下来两个循环变量,两个循环呢?【根据图案,想一下循环变量该如何变化?】



1.解法分析:

当拿到图标的时候,我们先来观察有何规律呢?就像我们参观故宫博物馆,站在广场上的我们肯定会从左到右,从上到下的瞅一瞅。那么我们也来瞅一瞅当年背过的乘法表吧。1,从左到右!第一行, 1*1=1 ,第二行, 1*2=2   2*2=4, 第三行,1*3=3  2*3=6 3*3=9,看不出什么所以然,那么换个角度看吧!2,从上到下,按列看似乎清晰不少,第一列1*1,1*2,1*3,1*4......,1*9,继续观察剩下的8列发现规律!规律是:第一个数按列递增加一【第一列永远是1,第二列永远是2....】,第二个数按行递增加一【第一行永远是1,第二行永远是2.....】。

尝试来写外层循环,for(i=1; i<=9; i++),i是个从1变到9的循环变量。呆呆的电脑只能一行一行输出数据,对照刚才找出的规律,每行都递增加一的数是第几个数呢?第一个数呢?还是第二个数?选择完之后,想想第二层循环该如何控制循环变量呢?

2.代码实现:

聪明的你搞定了吗?龚老师不小心把测试代码和正确代码都帖了上来,看看那副和你想的一样是正确代码呢?



3.代码详解:

解法分析中问的:每行都递增加一的数是第几个数呢?答案是第二个数!外层循环变量 i 是第二个数,那么里层的循环变量 j 便是第一个数了。第一个数按列递增加一的规则,也按照for (j=1; j<=9; j++)明显是不合理的,要想办法控制循环变量!我们再观察乘法表会发现规律:第一个数永远小于等于第二个数!既然如此,我们限制循环结束的判断条件就有了参照数了,拿二个数字来判断第一个数字的大小: ' j<=i ' 。初始化 j=1  和步长 j++ 每次递增加一,看起来是对的,那么尝试完善代码。

外层的循环变量 i 是第二个数,开始的时候为 1 ,里层的循环变量 j 是第一个数,当 i=1 时,j<=1 循环一次,输出 1*1=1 。bingo!愉快得跑到 {}外输出换行!【说明:for(;;){}外,表示循环范围外。 cout<<endl; 表示换行】

外层的循环变量 i 是第二个数,循环到2 ,里层的循环变量 j 是第一个数,当 i=2 时,j<=2 循环2次,输出 1*2=2  2*2=4 【 j 从 1 变到 2】。bingo!【说明:for(;;){}外,表示循环范围外。 cout<<endl; 表示换行】

外层的循环变量 i 是第二个数,循环到3 ,里层的循环变量 j 是第一个数,当 i=3 时,j<=3 循环2次,输出 1*3=3  2*3=6  3*3=9【 j 从 1 变到 2 变到 3】。bingo!【说明:for(;;){}外,表示循环范围外。 cout<<endl; 表示换行】


厉害了!你把for循环能力开发的更加强大了!其实,for双重循环的内外层可能会对电脑执行速度造成影响,我们会在之后数组篇章里提及,电脑内部的小秘密,在此埋个彩蛋!:-D

循环世界里除了for,还有while,do-while等循环能力者,还有break,continue等具备强大控制力的存在。我们的征程还很遥远,继承枚举法锲而不舍的精神,继续努力吧!




原文地址:访问原文地址
快照地址: 访问文章快照