00:00
行,那这样的三道问题呢,我们就说到这儿啊,大家呢,去熟悉一下这个for循环的一个基本的语法的使用好,接着的话呢,我们再看一下另外的两道问题,相当于呢,我们基于循环,嗯,看几个小的这种算法的题目,这个呢是结合分支结构呢做了一个使用啊,其实呢,我们刚才呢,解决这道问题的时候呢,也已经使用了这个分支结构了啊OK。行,然后我们再做一道题啊,新建一个啊,关于for的一个测试啊,这个写个一。哎,这个粘过来。往这拽一下啊。哎,这么着。把它CTRLCCTRLSCTRLV啊,我们保存一下,说这个呢叫输出所有的水仙花数,呃,这个呢是它定义的一个概念啊,呃,所谓的水仙花数呢,是指一个三位数,其各个位上的数字的立方和等于它本身。那这样的数呢,我们就称为它叫水仙花数了,哎,怕你不清楚,还举了个例子啊啊,比如说这个153,那把它呢,各个位上的这个数呢,都取出来啊,一三还有五,然后呢,哎,求它们各自的立方的和,如果跟这个数本身相等,我就认为呢,这叫水先化数了。
01:10
哎,这个如果让你自己去弄的话呢,估计你差不多这个一节课的时间,你自己当一道数学题也不一定能算完。有可能得花一上午的时间是吧,哎,那这时候呢,就凸显出来计算机计算机的这样一个魅力了啊,只要你会编程,像这个事儿的话呢,你就交给程序呢,帮你去做,计算机的运算速度呢,那比我们人靠谱的多了,速度也快很多。来我们看怎么去处理啊。这个首先的话呢,他提到说是个三位数哈,那你就是不是要先把所有的这种三位数全都遍历一遍。对,那这个我们就写for循环了啊,一个I等于。哎,从100开始。啊,然后呢,终止条件呢。小鱼。1000。或者你写呢,小于等于999,哎,对都行,OK,然后呢,这个迭代条件就是让他每次加一个数就行。
02:02
对,把所有的这个呃,这个三位数的范围内的整数呢,都给它遍历一遍啊好,那么在里边呢,我们就能取到每一个三位数了。哎,下边呢,我们要做的事呢,是不是就是。咱们在这写注释吧,啊这个呢,就是便利,哎,所有的这个三位数。啊,然后下边呢,就是针对于每一个。哎,三位数,哎是吧。获取奇。各个位上的数值吧。这个地方咱们在前面讲运算符的时候做过是吧。我记得当时好像也是153哈,拿他来说的,来把他的这个长这个个位十位百位都取出来啊。行,那先取谁都可以啊,嗯,先取个位吧。把三以它为例哈,把三取出来怎么弄?取模时是不是就出来了,哎,这块呢,我们把它呢定义成个变量了吧,这个咱们当初也是。
03:00
这样整它是吧,哎,我就还写成个了啊好,那以你就拿它为例去想啊,取模时这不三就出来了。呃,然后呢,再取这个十位吧,把五取出来。对。啊,怎么着?除以十。它要除以十的话呢,我们取的是商啊,是不是就15啊,然后呢,再取模时,哎,这就五就出来了。哎,这个是我们说的,这叫十位是吧?哎,这个呢,我们当时也讲过啊,就是这个呢,相当于是你先把这个15取出来,然后再找五,你也可以呢,把53取出来,再找五。那要把53取来,那就是。Anna。取模100。这不就把53取出来了吗?在。除以十吧。要伤是吧?是不是五就出来了。对,这个也可以啊,行两种不同的方式。好,这个十位出来以后呢,接着呢,啊,我们再取这个百位的这个一。怎么着?
04:00
哎,直接呢,除以100是不是就出来了。哎,In一个百啊出来了行,那这样的话呢,我把这个个位上的这个数值呢,就取出来了,然后下一步呢,就是来判断是否满足这个水仙花数的规则。哎,那这个规则呢,我们就判断了啊,说如果哎本身这个数呢,是哎,看看它跟啊我们说的这个个位啊,乘以个位,再乘以个位,再加上十。位的相乘再加上百位的相乘。总感觉写这个拼音有点low是吧?行,那就这样写了啊好,你把它呢,这个乘完以后呢,立方的和跟这个I呢,判断如果相等,它就是我们要的这个水仙花。哎,这个呢,咱就直接把这个I呢,就输出一下就行,哎,那不是我们要的,我也不管了,所以也不用写else。哎,然后这个呢,当前I判断完以后呢,我们再A加加看下一个数,仍然按照这个逻辑呢去处理。哎,就完事了。
05:00
哎,其实呢,相当于原来我们做的那道题呢,只是当时咱们做那个运算符的时候呢,是只做这个事儿了,在这个基础上呢,做了一个判断,然后现在呢,不止一个数,那就加了一个循环啊,一点点变得复杂一些。Java c报的一个测试1.java。哎,回车,哎一呢,一共是有四个。啊,有四个就有四个,关键的就是你这个结果里边呢,一定得有153啊。你像人家都给你举例说153满足了,然后你这里边儿还没有,那肯定是有问题。嗯,行,这呢是咱们做的这样的一道题。哎,下来呢,大家也可以写一写啊好,这个完了以后呢,我们接着再看下边还有一道题啊,这个题这个题呢,相对来说就有一点点难度了,通过这道题目呢,我们再说一个,哎,Break的使用场景,前面的话呢,我们在Switch case当中呢,用过break啊说我们在循环当中也可以使用break。啊表示的意思呢,也叫结束当前结构,那这时候呢,就是循环结构。
06:00
看一下。For的一个PAST2。啊,有同学说这个题我就写不了了啊,后边咱们还有更难的题哈。诶,这个写不了的话呢,哎,头脑要清醒清醒什么呢?你看你是语法不会还是说呢,这作为一道呃,数学上的一个小的算法题,这个算法逻辑不会。哎,语法不会,那是必须要弄明白的,算法逻辑不会,那只能是遇到一个解决一个,遇到一个解决一个,渐进式的提升你的解决问题的这种逻辑的能力啊。相当于以前呢,大家学习的这个数学学了这么多年。这个呢,普遍呢,可能大家都会觉得数学学的不太好。是这样吧。那当然有的人说我学的挺好的啊,你学的好的话,你会发现呢,你数学你也不怎么会用。啊,你说大家学数学学到这么多年大学呢,还学微积分呢,学的很多很高级的一些数学课程啊,那如果你生活当中你不是专门做数学研究的话。
07:02
啊,那其实你这个数学的话呢。小学就差不多够,实在不行呢,补个初中的应该也就差不多了,生活就肯定没有障碍是吧?对,那学习数学的意义是什么呢?对,其实就是培养大家这个思维逻辑的。啊,就有可能你做的是一些工科类的是吧,或者一些这个比如这个这个呃,这个设计车辆啊等等的,其实里边有好多这种参数,它可能是跟具体的学科学科有关系,但是里边呢,蕴含的点呢,其实都是这种数学的一些知识啊。包括呢,你像这个,呃,以前也有同学说啊,说你看我们大学这个老师,呃,当然咱们说的高级一点,不是那个普通的讲师级别的,是那种教授级别的,或者博导级别的啊,说我就是计算机系的,你看我们那个博导,我们那个导师都写不了代码。以前的时候呢,我也觉得说,你看作为一个导师,那么高级别的代码都不怎么会写,确实感觉挺low的是吧,但是事后你会发现呢,也人的精力毕竟是有限的嘛,是吧,你不可能让他那系写代码是行业最牛的,然后呢,他做科研还是最牛的,那他的精力也太有限了,可能达不到这样的程度,他可能就是在做底层的一些架构,一些底层的算法的研究,他做这个算法层面的东西呢,他可以用任何一个语言去实现,那语言的话呢,那他可能会一种语言,但是呢,不是所有语言它都很强。
08:16
所以呢,你在大学里边呃,他会招一些比如说硕士生啊,一些博士生啊,乃至说有些本科生也会参与进去,就是他们呢,是写代码比较溜的,导师这块呢,主要是研究底层的这种算法的设计是吧,架构,然后呢,交给具体的这个学生呢去实现。啊,像我们原来做实验室的时候,我们就就就就干这个事儿的,然后呢,这个你一开始觉得很高大上,当你做的多的话,你发现了这个事儿也挺low的是吧,导师做的那个事才是高级的东西。啊,就会成这样了啊。行,那这个咱们再拉回来啊。哎,看下这里边儿这个需求问题,让呢输入两个正整数啊,M和N啊,求其最大公约数和最小公倍数,哎,上来呢,就出来两个概念。哎,最大公约数,最小公倍数,这个你得清楚。
09:01
啊,举了个例子说12呢和20,它的最大公约数呢是四,最小公倍数呢是60。那现在呢,就是希望哎,我们随便呢,输入两个数,哎,他都是哎能够给计算出来的,不妨呢,这里边儿我们就拿这两个数来说吧。啊,这样呢,我们能够验证一下,你看结果是不是对的啊。好,那我们首先来搞定一下,叫最大公约数吧。哎,要想搞定最大公约数,你得先侵入什么是最大公约数。首先呢,提到了叫公约数,这个整不明白,这个我们就一点玻璃把最大先砍掉,叫公约数,公约数不清楚,把公约砍掉。先叫约束是吧。啊,约束是什么意思啊?对,就是约束呢,就比如说这个12吧,12的约数有。一二三四六十二是吧,对咱们一点来啊,12的来先说这个叫约束的一个概念啊。
10:02
约束的话呢,就是能够把这被这个数。除除尽了是吧,对就是啊约束的话呢,就是比如以12为例。哎,这个约数有是吧,一二三四六十二。哎,这样一些啊,因为这些数呢,除这个12的时候呢,都能除尽,这叫约束了啊,那么对应的我们这个20的话呢。20为例,哎,等会啊,预约数有。一二。四五十。20哎,对的啊,行,那么在它们各自有的这个约束里边呢,我们找公约数。就是既是你的约束,又是我的约束,这不就是公约束吗?哎,那么有一有二。有四。没了,好,那么在这个公约数里边找最大的那个。那不就是四吗?所以呢,诶就是这样一个需求。哎,那么诶,我们把它看成是一道数学问题的话呢,刚才已经剖析完了,那下边我们看看,把它看成一道诶编程问题,我们怎么能够把刚才说的这个过程给它量化成一些执行语句呢?
11:13
首先哎,我们涉及到一点,我得找它的约束,也得找它的约束是吧,哎,这个咱们就你看我这样分析哈,先找约束的话呢,假设这个约束呢,我就叫做I吧。这个I就是它的约束,呃,就是我我想判断这个I,哎,是不是我们要找的这个数据哈,呃,首先呢,你得判判定的这个I呢,得是它们俩的约束。那就得有这样一个逻辑哈,让这个M呢,是不是取模这个I。哎,你得是等等于零的是吧,然后并且。N呢?取模I也得等于零。哎,如果满足这个式子的话呢,最起码。它是一个公约数了。哎,你看如果这块我写成个if的话呢,这里边儿我把这个I呢给打印一下。
12:00
那这时候呢,这个I呢,首先我们能确定它一定是公约数。那行,那咱们先说啊,这个I的话呢,咱们先不着急找最大的,咱先找公约数,那这个I呢,接下来就是你这个I的范围是多少。我从哪个范围里边去找呢。哎,那我们你像我们刚才这个范围,咱们不是上来就一了,是不是你从一开始找,所以我们这呢,就写个方循环啊,我写。I等于一啊,那你这块找到哪个头就不再找了呢?是到12还是到20呢?有的人到20,是不是12就行。对,因为呢,你想呃,你13的话呢,除M已经不可能再除尽了,就没必要再去尝试了,所以呢,我们找这两个数中的较小的这值是吧?在这个里边呢,你可能我们说就想写这叫小于等于M了,但是我们要是换一个题目的话呢,可能M比N是不是要大了。所以这个位置你最好不要写死。
13:00
那怎么办?我们就获取M和N中的。较小值。哎,对,这个呢,一上来是不是有个三元算符了。M呢,如果要小于N的话,我就取M,否则呢,就取N。哎,这个呢,我们就取出来一个叫M吧。那这个时候我们就叫mean是吧。这个位置要不要等。要。哎,这个等号要需要的啊,你比如说这个数呢是四,一个是八,它俩的这个最大公因数其实就是四嘛,是吧,所以这个四你得留着啊,所以这个等号你得要行,哎这个呢我们要了,然后呢,这个I呢就加加了,哎然后呢,这块呢就在里边做判断了。哎,把它往里边移一下,这个呢,我们写一个大括号。哎,先把这个逻辑说一下啊,诶,我们从一开始呢,到min这个范围内呢,我们每个I呢都便利一下,然后看看能不能被MN呢都整除,如果能整除,我就输出这呢找到的叫做公约数。走起啊。
14:00
刚开始整咱们就一点点去剖析,后边熟了以后呢,大家直接上来就去洗了啊。编译好报错了。C啊。哎,For text2走起行,那这时候我们就输出了啊,这里边这个公约数呢,就124,跟我们刚才呢,诶看的是一样的。那么接下来啊,我们要找的叫最大公约数,这个怎么弄。嗯。加一个加个什么。基数。技术,嗯,什么意思。啊。加个基数记录有几个公约数是吧。然后呢?啊啊,刚才有同学这样想的啊,诶对这个可以啊,比如说我们现在就用一个,假如说我叫result吧,是吧,哎用它呢,先先是一吧,因为任何两个数在它的约束里边都有一是吧,所以呢,呃,一旦呢,你要这块出境的时候,它这样整啊我就result。
15:07
哎,被这个I呢给负个值,这个呢我就不要在这输出了。这意思吧,然后这个呢,我CTRL一下,我放到那个循环结束以后呢,在这个位置,我去输出一下这个result。保存一下,哎,走起。编译运行挺好。出来了是吧。就相当于我在这个过程当中啊,只要你数学数呢,我就给你诶负个值,那最后呢,你一个肯定就是最大的嘛。哎,没问题,哎这个呢,可以,这叫最大公约数。哎,然后呢,紧接着我这块想写个叫方式一是吧。那就意味着我们还有别的方式,而且别的方式呢,我觉得比这个要好一点。哎,刚才有同学我听到怎么说呢。到这来是吧。啊到这来,哎,那什么意思啊,就是我们现在要找的是这个最大的哈,但是咱们找的话,你发现咱们太擅长呢,就是一上来就从小网。
16:01
从从前往后,从前往后咱们老这样写,所以你会潜意识当中也会从前往后,但是从前往后你找的话呢,永远找的就是先小的,再是越来越大的,但人家现在让你找大的,你是不是直接从后往前来就快一点。这样的话,你找到第一个,第一个不就是你要要的最大的吗。哎,所以这块呢,我们这种方式呢,就不如我们下边这种方式好啊。哎,方式二,方式二的话呢,怎么弄呢,我们就来个for了也是啊。哎,这个号呢,就是我们来便利啊,相应的这个范围,这个数,从这里边找这个最大的公约数,那行了怎么写,哎怎么着。诶,上来是不是就命呢。好,然后呢,每次让他减减呗。那关键这个循环条件呢。这个到到什么时候就到头了。对,大于等于一是吧,哎,因为一呢,一定是它们的公约数哈,所以到大不了就是一呗。那就这样好,那么在这里边儿呢,仍然是不是这样来去考虑。哎,我们去做这个判断啊,说一旦你要是除尽了,哎,只要除尽,我说这个就是我们要找的这个数了。
17:07
没问题是吧。但是这块我要是去运行的话呢,它其实也会都找到,只不过是倒着来的。走一下看看。编译运行,诶这个四呢,是咱们上边这个做的四哈,这个方式二的话呢,这不就把这仨打出来了吗。哎,当然,我们现在只要一个就行。诶对,那就意味着只要你这块呢,输出以后呢,我们就不要再继续循环执行了,我们这块要讲一个关键词叫做break啊,一旦执行就跳出当前循环结构。诶,这呢,就是它的一个使用。好保存以后再做一个编译。哎,运行,哎,你看这就成了。所以呢,诶咱们推荐这个方式二,那么那就来了,为什么方式二就比方式一好呢。效率高。呃,效率高是高到哪儿了呢?对,你这儿呢,是不是把这个所有的全都算了一遍是吧,而我这儿呢,是不是有可能在中间不用循环到这儿结束的,咱们可能一旦找到一个呢,我就结束了。
18:09
不用全都遍历完,其次的话呢,你这还多定义了个变量是吧,哎,我这也没有,哎,所以这种方式要更好一些。啊,更好一点,好,这就我们说的这个这个这个点啊,行这呢,我们叫做最大公约数啊,这就成了,然后接下来啊,咱们看这个叫下一个需求。哎,最。嗯,最小公倍数。这个咱们这写个叫,哎需求一是吧。哎,需求二啊。好,那么最小公倍数的话呢,同样道理,你现在明白这个倍数的事儿。倍数呢,比如说以12为例啊。啊,那这个被数有这个就没头了。哎,12。对,24。这个36。48。60。
19:02
再再来一个吧,72是吧,哎,往后点点点,这就叫做它的倍数啊,然后二是为例。倍数有。对,这个呢,就是二十四十六十八十点点点点点。行,那么在这些倍数里边呢,我们找公倍数,公倍数呢,你这块上下一对比啊,60是是吧。啊,那60下后边还有一百二吧。哎,等等,这都是,哎,咱们在这里边儿呢,我们找这个最小的。他其实也没有所谓的最大的啊,因为这个特别多嘛。对,找到一个就行好,那这块的话呢,我们知道这个思路啊,有上面这样一个积累之后,哎,你想想我们这个去便利的时候哈。哎,我从哪个数开始。是吧,哎,因为呢,你想是倍数一定是能够除,它俩都得能除尽,你要从12开始吧,12从13开始吧,十二十三它比20还小呢,那也不可能是它的倍数了,所以我们应该是从这两个里边较大的这个数作为一个起点开始。
20:06
好,所以这里边儿我们跟上面类似啊,我就定一个max了,M,如果要大于N的话呢,我就把M取出来,否则就是N了,哎,如果要相等的话呢,那就是取的是N那都可以啊,这个等号你带不带都行啊,因为它俩相等的嘛。好,那么接下来写个for用完啊,同样的in I这个值呢,我们让它从max开始。然后呢,让I呢,不停的往后去走。哎,那么这块呢,我们也得写一个条件啊,这个怎么写。哎,对啊,就是诶公倍数,公倍数这个M和M乘以N。一定是他俩的一个公倍数。就是你大不了的话,就是它们乘以,呃,它俩互相乘的这个结果作为它的最小公倍数了啊,所以小于等于它。哎,同学说不写也可以,这个咱们这是高级的内容,一会儿我们再说啊行,然后呢,这个呢,我们就写上了,写上以后呢,在这里边我们就判断一下啊,说如果I呢,去取模仪,这个一定要清醒,你现在求倍数呢,你不能是M除以I了啊,是I除以M,如果呢是等于零,并且。
21:11
嗯,I模这个N呢,也等等于零,就相当于都是他们二者的倍数啊,一旦有一个,这就是我们要找的。哎,这个我们把这个I呢,就输出一下就行,哎,一旦你找到一个之后呢。实际上呢,我们就不就行了,哎,就不用再去找了,好这呢我们就写完了,哎。过来啊,这个咱们在这儿加一个吧。这个叫,哎,最大公约数为。最小。哎,最小公倍数。啊喂啊。哎,保存一下好。
22:01
做测试。哎,编译运行,哎,这就出来,哎四六十哎没问题。行,那这个题目的话,我们就把它就做完了啊好,那么这个做完之后呢,诶首先的话呢,我们说把它当成一道数学题,诶我们把这道题目呢,就搞定了,然后在这里边我们出现了循环当中啊,嵌套这个if else的这样一个使用。然后包括呢,你想嵌到这个随case啊等等都行,就看你在需要的时候呢,需要分支的就用分支,需要循环了就循环,循环里边套分支,分支里边套循环都可以。诶,都可以的啊,这这呢,我们说的是第一个从语法上的问题,然后另外的话呢,我们再提到一下,在这个题目当中,我们有一个新的知识点叫做break。哎,所以首先啊,我们在这呢写一个。啊,上面这个是具体的,咱叫一个需求了啊,或者叫案例。好,下面呢,我们来做一个具体的说明。好,说明了第一个问题,说我们。哎,可以在啊循环结构中啊,准确来讲呢,是循环的循环体中啊,使用break关键字。
23:04
啊,使用它说一旦执行break。啊,就跳出或者叫结束。哎,当前循环结构。OK,行,这呢比较简单,有点像我们前面讲那个case一样啊,哎,Switch case当中执行break了,那就挑出当前case结构了啊,真的类似,好,那么由这个出发呢,我们做一个小结哈,哎,大家想一想,我们如何结束一个循环结构?虽然说我们还没有讲well,还没有讲do well啊,其实是类似的啊,哎,我们在这个for循环当中。啊,以它为例哈,我们结束循环结构,前面呢,咱们讲的时候呢,是不是都是。以这个位置不满足解除的是吧。那其实还可以。哎,执行了break。对,强制结束了,因为刚才我们在做这个最大公约数的时候呢,就发现了它其实并没有到一这块。
24:01
啊,满足了这个就直接出去了,没有再去执行减减啊,进而的话,这个就没有机会为false了。所以说哎,如何进入一个循环结构呢,我们说这个方式一呢。哎,就是我们的叫循环条件。哎,对循环条件不满足。也就是说呢,这个循环条件,呃,相当于它执行完以后呢,是false是吧。哎,条件。来执行完以后啊。是false。那这个呢,是其中的一种情况,那么第二种情况呢。哎,就是在哎循环体中执行了,哎,Break。啊,有的同学呢,这个预习过后边内容啊,说还有一种情况,我们在循环里边呢,执行了return。哎,那也是个关键字啊,那个return呢,我们以后再说,其实呢,放在这儿呢,也不太合适哈,因为return本身是用于结束一个方法的。哎,不是只是用来结束一个循环的哈,哎,所以说呢,我们严格上来讲呢,其实就是这两个。
25:05
啊,接入方法什么意思啊,就这是个方法,如果没要有个return呢,这个把这个方法就结束了,后边有代码也不行,方法都不要了,你想方法里边的循环,那当然也不执行了呀。相当于就顺带着把循环就给结束了。啊对,以后再说那个事儿啊。好,这里边呢,我们就记住这两个问题就可以了,那么在实际开发当中,大家根据实际问题啊,你可能会选这个,也可能会选这个,但也有可能说你看我们这里边既有它又有它啊,既有它又有它,那就执行着看哈,也有可能呢,它是执行这个呢结束的,也有可能这块呢,你这个循环条件,这个if啊,始终就进不去。那最后的话呢,是这个不满足出去的。啊,也是有可能的。OK,那就具体问题运行了,就看看效果啊,如果你什么都知道了,那你写它干啥,这些不自己就能手算就算出来是吧,OK啊好这呢我们就告一段落。
我来说两句