scala 阶段 1 过关练习

20 阅读1分钟

scala 阶段 1 过关练习

  1. 编写一个函数,它的入参是一个表示年份的整数,返回值是一个 bool 值,判断这个年份是否是闰年。

object l48 {
  def main(args: Array[String]): Unit = {
    // 测试几个年份
    val years = List(2000, 2012, 2100, 2024)
    years.foreach { year =>
      println(s"$year${if (isLeapYear(year)) "" else "不"}闰年")
    }
  }

  // 判断闰年的函数
  def isLeapYear(year: Int): Boolean = {
    (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
  }
}

  1. 编写一个函数,用来求 f (100) 的值。其中 f (n)=1 -1/2 + 1/3 -1/4 + … 1/n

object l49 {
  def main(args: Array[String]): Unit = {
    val result = calculateF(100)
    println(s"f(100) 的值为:$result")
  }

  // 计算 f(n) = 1 - 1/2 + 1/3 - 1/4 + ... ±1/n
  def calculateF(n: Int): Double = {
    (1 to n).map(i => if (i % 2 == 1) 1.0 / i else -1.0 / i).sum
  }

}

  1. 编写一个函数,用来求斐波那契数列的前 20 项。其中 f (1)=f (2)=1,f (n) = f (n-1) + f (n-2)。

object l50 {
  def main(args: Array[String]): Unit = {
    val fibList = fibonacci(20)
    println("斐波那契数列前20项:")
    fibList.foreach(println)
  }

  // 生成斐波那契数列前n项
  def fibonacci(n: Int): List[Int] = {
    if (n <= 0) List.empty
    else if (n == 1) List(1)
    else if (n == 2) List(1, 1)
    else {
      val prev = fibonacci(n - 1)
      prev :+ prev(n - 2) + prev(n - 3)
    }
  }
}

  1. 编写一个函数,允许用户输入一个整数年份,如果用户输入的是闰年就停止输入,否则就一直提示用户输入。

object l51 {
  import scala.io.StdIn

  def main(args: Array[String]): Unit = {
    inputLeapYear()
  }

  // 循环输入直到输入闰年
  def inputLeapYear(): Unit = {
    var year = 0
    do {
      print("请输入一个闰年:")
      year = StdIn.readInt()
      if (!isLeapYear(year)) {
        println(s"$year 不是闰年,请重新输入!")
      }
    } while (!isLeapYear(year))
    println(s"恭喜!$year 是闰年。")
  }

  // 复用闰年判断函数
  def isLeapYear(year: Int): Boolean = {
    (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
  }
}

  1. 对成绩 (100,51,55,67,59,89) 进行处理,如果分数在 56-59 之间,就设置为 60 分,得到的新成绩为 (100,51,55,67,60,89)。

object l52 {
  def main(args: Array[String]): Unit = {
    val scores = Array(100, 51, 55, 67, 59, 89)
    println("处理前的成绩:")
    scores.foreach(println)

    val processed = processScores(scores)
    println("\n处理后的成绩(56-59分调整为60分):")
    processed.foreach(println)
  }

  // 处理成绩:56-59分调整为60分,其余不变
  def processScores(scores: Array[Int]): Array[Int] = {
    scores.map { score =>
      if (score >= 56 && score <= 59) 60 else score
    }
  }
}