多层嵌套类requestbody_#开发语言

第十四届蓝桥杯集训——JavaC组第十四篇——循环嵌套


目录

第十四届蓝桥杯集训——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,在下列列表中可以看到整个渐变过程。

多层嵌套类requestbody_#开发语言_02

在上图中我们理解整个笛卡尔积的过程,也就是两两匹配,下面我对笛卡尔积做了个解释。

名词解析:

笛卡尔积

笛卡尔乘积是指在数学中,两个集合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)}。 

其实我们可以无限次的套用,但是你会发现复杂度几何倍递增后无法执行结果了。

所以这个嵌套的层数越少越好。

我们做个例题:

2014年蓝桥杯Java C组——猜年龄

这里例题就是一个嵌套的暴力解题过程。我们很多时候用这种方法真的很方便。无需大脑进行复杂的运算直接暴力处置。

九九乘法表也是个很好的例子:

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();
		}
	}

}

效果:

多层嵌套类requestbody_System_03

祝大家更好的掌握它。

循序命名

循环我们是可以进行命名的,例如:

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();
		}
	}

}

结束外层循环效果:

多层嵌套类requestbody_#java_04

 

结果自身循环效果:

多层嵌套类requestbody_#java_05

这种用法全网不好找,我也是当年上学的时候老师教的,我记忆一辈子。

很多方法都是一代代传承下来的,传承的力量。