内建控制-多重循环

43 阅读2分钟

主要内容

1.多重循环的定义

2.输出特殊图形

3.乘法口诀表

4.百鸡百钱问题

(一)多重循环的基本使用

格式如下:

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

说明:

1.for可以替换成while循环。

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

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

练习

1. println(i)会执行几次?

2. println(i,j)会执行几次?

for (i <- 1 to 5){  
  println(i)  
  for(j <- 10 to 15){  
     print(i, j)  
  }  
}

结果如下

屏幕截图 2025-09-30 092854.png

(二)输出特殊图形

1.编写代码打印输出如下图形:

1

22

333

4444

55555

object base028 {
  def main(array: Array[String]): Unit={
    for(i <- 1 to 5){  //外层循环
      for(j <- 1 to i){
        println(i)
      }
      println() // 换行
    }
  }
}

2.编写代码打印输出如下图形:

55555

4444

333

22

1

object base28 { 
    def main(args: Array[String]): Unit = { 
    for(i <- 1 to 5){ //外层循环 
    for(j <-1 to 6-i){
    print(i) 
    } 
    println() //换行 
    }
  }
 }

(三)打印乘法口诀表

object base029 {
  def main(array: Array[String]): Unit={
    for(i <- 1 to 9){  //外层循环
      for(j <- 1 to i){
//        printf(s"${j}c"×s"${i}=${i*j}")
      printf("%d×%d=%-4d",j,i,i*j)

        /**
         *  %d:占位符,会输出一个整数
         *  %-4d :占位符,会输出一个整数,一共4个字符的空间大小,左对齐
         *  %4d:占位符,会输出一个整数,一共4个字符的空间大小,右对齐
         */

      }
      println() // 换行
    }
  }
}

颠倒九九乘法表

object base029 {
  def main(array: Array[String]): Unit={
    for(i <- 1 to 9){  //外层循环
      for(j <- 1 to i){
//        printf(s"${j}c"×s"${i}=${i*j}")
      printf("%d×%d=%-4d",j,i,i*j)

        /**
         *  %d:占位符,会输出一个整数
         *  %-4d :占位符,会输出一个整数,一共4个字符的空间大小,左对齐
         *  %4d:占位符,会输出一个整数,一共4个字符的空间大小,右对齐
         */

      }
      println() // 换行
    }
  }
}

(四).百鸡百钱问题

公鸡1只,价格5钱;

母鸡1只,价格3钱;

小鸡3只,价格1钱(即1钱买3只小鸡);

用100钱买只鸡,问公鸡、母鸡、小鸡各有多少只?

object base30 {
  def main(args: Array[String]): Unit = {
    /**
     * 设公鸡为x,母鸡y只,小鸡100-x-y
     * 同时0 <= x <= 20,0<= y <=33
     *
     * 5x +3y + (100-x-y)/3 =100  (1)
     * 暴力求解
     *  代入(1) 看看是否成立
     */
    var k = 0
    for(x <- 0 to 20) {
      for(y <- 0 to 33){
        val z = 100 - x - y
        //代入(1)
        if(5*x + 3*y + z/3 == 100){
          k+=1
          println(s"第${k}种:",x, y, z)
        }
      }
    }
  }

}

结果如下:

屏幕截图 2025-10-13 154708.png