9内建控制-多重循环

60 阅读2分钟

多重循环的基本使用

格式:

for ( 循环变量 <- 数据集) {
/  for(){
/    for(){
/    }
/  }
}

说明:

1.for可以替换成while循环

2.循环的嵌套可以有多个,数量不限。

3.里外层循环执行的次数不相同。

object base27 {
  def main(args: Array[String]): Unit = {
    // 循环嵌套
    // 多重循环,循环里面还有循环
    var n = 0  // 添加变量n的声明
    for(i <- 0 to 10) {
      //println(i) 
      for (j <- 5 to 20) {
        for (k <- 1 to 10) {
          n += 1
          println(n, k, i, j)
        }
      }
    }
  }
}

结果如图:

image.png

(一)编写代码打印输出如下图形

1

22

333

4444

55555

object base28 {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 5) { // 控制打印几行
      for (j <- 1 to i) { // 控制具体每一行的内容
        print(i)
      }
      println() // 换行
    }
  }
}

(二)打印乘法口诀表

提问:如何输出乘法口诀表

按1,3,5... 这个格式来输出,这就涉及到步长。

格式1:1 to 5 by 2

格式2:Range(1,5,2)

object base29 {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 9) { // 行
      for (j <- 1 to i) { // 具体一行上的内容
        //      print(s"${j}x${i}=${i*j} ")

        // %d 是表示占位符,这儿要填入一个整数
        // %-4d 表示一个占位符,这儿要填入一个整数,并且一共四位,左对齐

        // j 填入第一个 %d
        // i 填入第二个 %d
        // i*j的结果,填入 %-4d
        printf("%d×%d=%-4d",j, i, i*j)
      }
      println() // 换行
    }
  }
}

结果如图:

image.png

(三)循环的白鸡百钱问题

“百钱百鸡”是一个经典的数学问题,最早见于中国古代数学著作《张丘建算经》。其描述如下: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

翻译过来就是: 公鸡(鸡翁)1只,值钱5; 母鸡(鸡母)1只,值钱3; 小鸡(鸡雏)3只,值钱1,百钱买百只鸡; 用100钱买100只鸡,问公鸡、母鸡、小鸡各有多少只?

object base30 {
  def main(args: Array[String]): Unit = {
    var k = 0
    for (gj <- 0 to 100) {
      for (mj <- 0 to 100) {
        var xj = 100 - gj - mj
        if (xj >= 0 && xj % 3 == 0) { // 小鸡的数量不能为负

          if (5*gj + 3*mj + xj/3 == 100 ) { // 价格合计100元且小鸡数量是3的倍数
            k += 1
            println(k, gj, mj, xj)
          }
        }
      }
    }
  }

}

结果如图:

image.png