1. 闰年判断
题目要求:
从键盘输入一个年份,判断它是否是闰年
代码
object base09 {
def main(args: Array[String]): Unit = {
// 判断闰年
/*
1. 让用户输入一个整数,表示年份
2. 判断这个年份是否是闰年
3. 输出结果
*/
val year: Int = scala.io.StdIn.readInt()
// 2000 ==> 2000是闰年
// 2024 ==> 2024是闰年
// 2025 ==> 2025不是闰年
// 1900 ==> 1900不是闰年
// 闰年规则:能被4整除但不能被100整除,或者能被400整除
val result: Boolean = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
if (result) {
println(s"$year 是闰年")
} else {
println(s"$year 不是闰年")
}
}
}
2. 分数序列求和
题目要求:
计算 s = 1 - 1/2 + 1/3 - 1/4 + 1/5 ... + 1/19 的值
代码
object base0801 {
def main(args: Array[String]): Unit = {
// 求 s = 1 - 1/2 + 1/3 - 1/4 + 1/5 ...
var sum: Double = 0
var i = 1
while (i <= 19) {
if (i % 2 == 1) {
sum = sum + 1.0 / i
} else {
sum = sum - 1.0 / i
}
i += 1
}
println(s"sum = $sum")
}
}
3. 素数判断
题目要求:
从键盘输入一个数,判断它是否是素数
代码
import scala.util.control.Breaks.{break, breakable}
object base0802 {
def main(args: Array[String]): Unit = {
/*
判断质数。
* 质数:只能被1和它自己整除的数。
*/
println("请输入一个整数:")
val num = scala.io.StdIn.readInt()
var isPrime = true
if (num <= 1) {
isPrime = false
} else {
breakable {
for (i <- 2 until num) {
if (num % i == 0) {
isPrime = false
break
}
}
}
}
if (isPrime) {
println(s"$num 是素数")
} else {
println(s"$num 不是素数")
}
}
}
4. 小球弹跳问题
题目要求:
小球从100米高处自由落下,每次弹回高度的一半,求经过多少次落地后弹起高度低于0.5米
代码
object base0803 {
def main(args: Array[String]): Unit = {
/**
* 弹跳小球
*/
var h: Double = 100
var i = 0
while (h >= 0.5) {
i += 1
h = h * 0.5
}
println(s"第$i 次落地后,高度是 $h")
}
}
5. 复利计算
题目要求:
年化回报率10%,求第10年有多少元?多少年后能超过1000元?
代码
object base0804 {
def main(args: Array[String]): Unit = {
var i = 0
var money = 1.0
// 计算第10年的金额
while (i < 10) {
money = money * 1.1
i = i + 1
}
println(s"第$i 年结束时,有 $money 元")
// 重置计算超过1000元所需的年数
i = 0
money = 1.0
while (money < 1000) {
money = money * 1.1
i = i + 1
}
println(s"第$i 年结束时,有 $money 元,超过1000元")
}
}
6. 百鸡百钱问题
题目要求:
公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱三只,用100文钱买100只鸡,问公鸡、母鸡、小鸡各多少只?
代码
object base1004 {
def main(args: Array[String]): Unit = {
// 百鸡百钱
/**
* 设公鸡 x, 母鸡 y 只, 小鸡是 100 - x - y.
* 同时 0 <= x <= 20, 0<=y<=33
*
* 5x + 3y + (100 - x - y) / 3 = 100
*
* 暴力求解
*/
var k = 0
for (x <- 0 to 20) {
for (y <- 0 to 33) {
val z = 100 - x - y
// 代入公式检查
if (5 * x + 3 * y + z / 3.0 == 100) {
k += 1
println(s"$k: 公鸡$x只, 母鸡$y只, 小鸡$z只")
}
}
}
}
}
7. 乘法口诀表
题目要求:
输出9×9乘法口诀表
代码
object base1003 {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9) {
for (j <- 1 to 9) {
// 格式化输出,保持对齐
printf("%d×%d=%-4d", j, i, i * j)
}
/**
* %d: 占位符,会输出一个整数
* %-4d: 占位符,会输出一个整数,一共占据4个字符位置,左对齐
* %4d: 占位符,会输出一个整数,一共占据4个字符位置,右对齐
*/
println() // 换行
}
}
}
总结 · while循环:适合不确定循环次数的场景 · for循环:适合已知循环范围的场景 · 嵌套循环:解决复杂的多维度问题 · 循环控制:使用break实现提前退出