多重循环

59 阅读1分钟

说明:

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

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

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

var k = 0
for(i <- -1 to 5){  // 外层循环

  println(i) // 会输出5次,由i决定

  for(j <- 10 to 15) { // 内层循环
    k = k + 1

    println(k,i,j) // 会输出60次,由k,i,j决定
  }
}

练习1:

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

1

22

333

4444

55555

for(i <- 1 to 5){
  for(j <- 1 to i){
    print(s"${i}")
  }
  println()// 换行
}

练习2: 打印乘法口诀表

for(i <- 1 to 9){
  for(j <- 1 to i){
   // print(s"${j}×${i}×${i*j} ")
    printf("%d×%d=%-4d",j,i,i*j)

  }
  println()// 换行
}

练习3 百鸡百钱问题

// 白鸡百钱问题
/**
 * 设公鸡x,母鸡y,小鸡100-x-y
 * 同时 0<=x<=20,0<=y<=33
 *
 *   5x +3y + (100-x-y)/3 = 100    (1)
 *
 *  暴力求解
 *  1.(0,0,100) 代入(1)看是否成立
 *  2.(0,1,99) 代入(1) 看是否成立
 *  ···
 *  34.(0,33,37) 代入(1) 看是否成立
 */
var k = 0
for(x <- 1 to 20){
  for(y <- 0 to 33){
    val z = 100 - x -y
    // 代入1
    if(5*x + 3*y + z/3 == 100){
      k += 1
      println(k,x,y,z)
    }
  }