实例1:
题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
程序源代码:
object HelloWord {
def main(args: Array[String]): Unit = {
var num:Int=0
for (i <- 1 to 4;j<- 1 to 4;k <- 1 to 4;if i !=j;if i != k ;if j != k ){
print(s"${i}${j}${k} ")
num +=1
}
println()
println(s"能组成${num}个")
}
}
运行结果:
实例2:
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序分析1:可以利用if判断语句:
程序源代码:
object HelloWord {
def main(args: Array[String]): Unit = {
import scala.io.StdIn
println("请输入利润:")
val profit=StdIn.readFloat()
if (profit <0) println("应发放的奖金为0元")
if (profit >=0 && profit<100000) println(s"应发放的奖金为${profit*0.1}")
if (profit >=100000 && profit<200000) println(s"应发放的奖金为${(profit-100000)*0.075+100000*0.1}")
if (profit >=200000 && profit<400000) println(s"应发放的奖金为${(profit-200000)*0.05+(200000-100000)*0.075+100000*0.1}")
if (profit >=400000 && profit<600000) println(s"应发放的奖金为${(profit-400000)*0.03+(400000-200000)*0.05+(200000-100000)*0.075+100000*0.1}")
if (profit >=600000 && profit<1000000) println(s"应发放的奖金为${(profit-600000)*0.015+(600000-400000)*0.03+(400000-200000)*0.05+(200000-100000)*0.075+100000*0.1}")
if (profit>=1000000) println(s"应发放的奖金为${(profit-1000000)*0.01+(1000000-600000)*0.015+(600000-400000)*0.03+(400000-200000)*0.05+(200000-100000)*0.075+100000*0.1}")
}
}
程序分析2:可以利用数轴分界,定位。
程序源代码:
import scala.io.StdIn
object HelloWord {
def main(args: Array[String]): Unit = {
print("请输入利润:")
var profit = StdIn.readFloat()
val arr = List(1000000, 600000, 400000, 200000, 100000, 0)
val rat = List(0.01, 0.015, 0.03, 0.05, 0.075, 0.1)
var bonus: Float = 0
for (i <- 0 to 5) {
if (profit > arr(i)) {
bonus += ((profit - arr(i).toFloat) * rat(i).toFloat)
profit = arr(i).toFloat
}
}
println(bonus)
}
}
运行结果:

实例3:
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
程序源代码:
object HelloWord {
def main(args: Array[String]): Unit = {
var num=0
for (i: Int <- 1 to 85) {
if (168 % i == 0) {
val j: Int = 168 / i
if (i > j & (i + j) % 2 == 0 & (i - j) % 2 == 0) {
val m = (i + j) / 2
val n = (i - j) / 2
num = n * m - 100
}
}
}
println(num)
}
}
运行结果:

实例4:
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天
程序源代码:
import scala.io.StdIn
object HelloWord {
def main(args: Array[String]): Unit = {
val year = StdIn.readInt()
val month = StdIn.readInt()
val day = StdIn.readInt()
val months = List(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
if (month > 0 && month <= 12) {
var sum = months(month - 1) + day
var leap = 0
if (year % 400 == 0 || year % 4 == 0 || year % 100 != 0) {
leap = 1
}
if (leap == 1 && month > 2) {
sum += 1
}
println(s"这一天是这一年的第${sum}天")
} else {
println("输入有误!")
}
}
}
运行结果:

案例5:
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:把三个整数放在列表里,然后用列表的sorted方法进行升序排序。
程序源代码:
import scala.io.StdIn
object hello2 {
def main(args: Array[String]): Unit = {
var list:List[Int]=Nil
for ( n <- "xyz"){
print(s"请输入${n}:")
val num =StdIn.readInt()
list=list:+num
}
println(list.sorted)
}
}
运行结果:

案例6:
题目:输出第n个斐波那契数列。
程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
import scala.io.StdIn
object hello3 {
def main(args: Array[String]): Unit = {
print("请输入n:")
val n = StdIn.readInt()
var a = 1
var b = 1
var c = 0
for (i <- 0 until n) {
print(s"${a} ")
c = a + b
a = b
b = c
}
println()
println(s"第${n}个斐波那契数为${b - a}")
}
}
运行结果:

案例7:
题目:将一个列表的数据复制到另一个列表中。
程序源代码:
object hello3 {
def main(args: Array[String]): Unit = {
val a=List(1,2,3)
val b =a
println(b)
}
}
运行结果:

案例8:
题目:输出 9*9 乘法口诀表。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
程序源代码:
object hello3 {
def main(args: Array[String]): Unit = {
for (i <- 1 to 9){
for (j <- 1 to i){
print(s"${j}*${i}=${j*i} ")
}
println()
}
}
}
运行结果:

案例9:
题目:暂停一秒输出。
程序分析:可以延迟main函数
程序源代码:
object hello2 {
val list=List(1,2,3)
println(list)
def main(args: Array[String]): Unit = {
Thread.sleep(1000)//延迟main进程一秒
println(list)
}
}
运行结果:

案例10:
题目:暂停一秒输出,并格式化当前时间。
程序源代码:
import java.text.SimpleDateFormat
import java.util.Date
object hello2 {
val t=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date)
println(t)
def main(args: Array[String]): Unit = {
Thread.sleep(1000)//延迟main进程一秒
val time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date)
println(time)
}
}
运行结果:

案例11:
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
程序源代码:
object hello2 {
def main(args: Array[String]): Unit = {
var f1 = 1
var f2 = 1
for (i <- 1 to 21) {
printf("%12d ", f1)
printf("%12d ", f2)
if (i%3==0) println()
f1+=f2
f2+=f1
}
}
}
运行结果:

案例12:
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
程序源代码:
import util.control.Breaks._
object hello2 {
def main(args: Array[String]): Unit = {
var h=0
for (i <-101 to 200){
breakable{
for (j <- 2 until i) {
if (i % j == 0) break
h+=1
if (h==i-2){
println(i)
h=0
}
}
}
}
}
}
运行结果:

案例13:
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
程序源代码:
object hello2 {
def main(args: Array[String]): Unit = {
for (i <- 100 to 999) {
val a = i / 100 % 10
val b = i / 10 % 10
val c = i % 10
if (a*a*a+b*b*b+c*c*c==i) println(i)
}
}
}
运行结果:

案例14:
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码:
import scala.io.StdIn
object hello2 {
def main(args: Array[String]): Unit = {
println("请输入一个整数:")
var a = StdIn.readInt()
print(a + " = ")
var s = 0
for (i <- 2 until a) {
while (a % i == 0) {
s += 1
a = a / i
if (s == 1) {
print(i)
} else {
print(" * " + i)
}
}
}
}
}
运行结果:

案例15:
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:用if语句判断
程序源代码:
import scala.io.StdIn
object hello2 {
def main(args: Array[String]): Unit = {
print("请输入分数:")
val num=StdIn.readInt()
if (num >= 90) {
println(s"${num}属于A")
}else if(num >=60){
println(s"${num}属于B")
}else{
println(s"${num}属于C")
}
}
}
运行结果:

案例16:
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:可以采用正则表达式提取想要的字符
程序原代码:
import scala.io.StdIn
import scala.util.matching.Regex
object hello2 {
def main(args: Array[String]): Unit = {
print("请输入字符串:")
val num=StdIn.readLine()
val pattern =new Regex("([a-z]|[A-Z])")
val char=(pattern findAllIn num).mkString("")
println("英文字母有"+char.length+"个")
val kongbai=new Regex("\\s")
val kb=(kongbai findAllIn num).mkString("")
println(s"空格有${kb.length}个")
val shuzi=new Regex("\\d")
val shzi=(shuzi findAllIn num).mkString("")
println(s"数字有${shzi.length}个")
val qita=new Regex("([^a-zA-Z0-9] | \\S)")
val qt=(qita findAllIn num).mkString("")
println(s"其他字符有${qt.length}个")
}
}
运行结果:

案例17:
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序分析:关键是计算出每一项的值。
程序源代码:
import scala.io.StdIn
object hello2 {
def main(args: Array[String]): Unit = {
println("请输入a")
var a = StdIn.readInt()
println("请输入n")
var n = StdIn.readInt()
var sum = 0
var a2 = a
for (i <- 0 until n){
var num = math.pow(10,i).toInt;
if (i!=0){
a2 += a*num
}
sum+=a2
}
print(sum)
}
}
运行结果:

案例18:
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
程序源代码:
object WangShu extends App {
println("1到1000 的完数有:")
val iList = for(i <- 1 to 1000 if isWangShu(i)) yield i
println(iList.mkString(" "))
def isWangShu(i:Int): Boolean = {
var num = 0
for (j <- 1 to i / 2) {
if (i % j == 0) num += j
}
if (i==num) true else false
}
}
运行结果:

这篇博客通过18个实例展示了Scala编程的应用,包括数字操作、逻辑判断、列表操作、时间延迟、质因数分解等多个方面,帮助读者深入理解Scala语言的特性和使用技巧。
811

被折叠的 条评论
为什么被折叠?



