循环例题

86 阅读2分钟

一,多重循环

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

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

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

object day14 {
  def main(args: Array[String]): Unit = {
    var k = 0
    for(i <- 0 to 5){ // 外层循环

      println(i) // 输出几次? 它由哪个循环变量的值所定?

      for(j <- 11 to 20){ // 内层循环
        println(k,i,j)  //输出几次? 它由哪个循环变量的值所定?
      }
    }
  }
}

1.png

2.png 如何得知以上 println 输出几次?
解答:

for(i <- 0 to 5) 0-5输出6次 0,1,2,3,4,5

for(j <- 11 to 20) 输出10次
11,12,13,14,15,16,17,18,19,20
再用输出6次乘以10次 6*10=60
可以得出 for(j <- 11 to 20) 输出60次

例题1:

1,

1
22
333
4444
55555

要求:
1.每行的数字个数都不相同,完成一行输出之后可以换行。
2.使用外层循环控制每行的重复次数,使用内层循环控制每行的具体内容。

3.png 修改如下:

4.png 得出结果:

5.png

2,打印乘法口诀表

9.png

object day16 {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 9){
      for(j <- 1 to 9){
//        printf(s"${j]*${i}=${i*j]")
        printf("%d*%d=%-4d",j,i,i*j)

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

拓展:使用printf("%d×%d=%-5d",i,j i*j) 可以更整齐地打印。
结果:

7.png

如何使打印出的结果和乘法表一样向下对齐?修改这个代码

修改如下:

object day16 {
  def main(args: Array[String]): Unit = {
    for(i <- 1 to 9){
      for(j <- 1 to i){
//        printf(s"${j]*${i}=${i*j]")
        printf("%d*%d=%-4d",j,i,i*j)

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

6.png 输出结果:

01.png

例题3:

公鸡(鸡翁)1只,价格5钱;
母鸡(鸡母)1只,价格3钱;
小鸡(鸡雏)3只,价格1钱(即1钱买3只小鸡);
用100钱买100只鸡,问公鸡、母鸡、小鸡各有多少只?

object day17 {
  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, (0,0,100) 代入 (1)看看是否成立?
         * 2,  (0,1,99)  代入 (1)看看是否成立?
         * ...
         * 34, (0,33,37)  代入(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(k,x,y,z)
        }
      }
      }
    }
}