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

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

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

名词解析:

笛卡尔积

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

效果:

祝大家更好的掌握它。

循序命名

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

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

结束外层循环效果:

结果自身循环效果:

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

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

相关文章
|
7月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
115 0
|
7月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
88 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
92 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
97 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章
71 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1006 拿金币
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1006 拿金币
72 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1004 无聊的逗
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1004 无聊的逗
99 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1003 礼物
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1003 礼物
96 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1001 跳马
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1001 跳马
71 0
|
7月前
|
移动开发 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-998 娜神平衡
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-998 娜神平衡
67 0