第十四届蓝桥杯集训——JavaC组第十四篇——循环嵌套
循环嵌套是逻辑程序中的方法
循环嵌套,逻辑程序中常用的一种方法,不仅在C语言编程中用到,在卡西欧科学计算器中也常能用到的逻辑语言。在一个循环体语句中又包含另一个循环语句,称为循环嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。各种语言中关于循环的嵌套的概念都是一样的。当然,这个用法也会用到其它语言中,毕竟只是循环的一种使用方法。我们接下来一起看看在java是的用法。
对应嵌套的循环复杂度
时间复杂度O(n的m次方),n是循环长度m是嵌套层数。
嵌套循环示例:
这是一个基础的嵌套循环示例,i与j相当于笛卡尔积相乘。,这里的复杂度是O(n的2次方)
package com.item.action; public class demo { public static void main(String[] args) { // TODO Auto-generated method stub //外层 for (int i = 0; i < 10; i++) { //内层 for (int j = 0; j < 10; j++) { System.out.print(i+"~"+j+"\t"); } System.out.println(); } } }
输出效果:
左侧是i,右侧是j,在下列列表中可以看到整个渐变过程。
在上图中我们理解整个笛卡尔积的过程,也就是两两匹配,下面我对笛卡尔积做了个解释。
名词解析:
笛卡尔积
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。
示例:
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
其实我们可以无限次的套用,但是你会发现复杂度几何倍递增后无法执行结果了。
所以这个嵌套的层数越少越好。
我们做个例题:
这里例题就是一个嵌套的暴力解题过程。我们很多时候用这种方法真的很方便。无需大脑进行复杂的运算直接暴力处置。
九九乘法表也是个很好的例子:
package com.item.action; public class demo { public static void main(String[] args) { // TODO Auto-generated method stub //外层 for (int i = 1; i < 10; i++) { //内层 for (int j = 1; j <= i; j++) { System.out.print(j+"*"+i+"="+(i*j)+"\t"); } System.out.println(); } } }
效果:
祝大家更好的掌握它。
循序命名
循环我们是可以进行命名的,例如:
package com.item.action; public class demo { public static void main(String[] args) { // TODO Auto-generated method stub //外层 a:for (int i = 1; i < 10; i++) { //内层 for (int j = 1; j <= i; j++) { if(i==7) { break a;//结束外层循环,如果不写是结束内层循环 } System.out.print(j+"*"+i+"="+(i*j)+"\t"); } System.out.println(); } } }
结束外层循环效果:
结果自身循环效果:
这种用法全网不好找,我也是当年上学的时候老师教的,我记忆一辈子。
很多方法都是一代代传承下来的,传承的力量。