一:第1章 Scala基础编程
1-1 h0001.Hello World!
本题要求编写程序,输出一个短句“Hello World!”。
输入格式:
本题目没有输入。
输出格式:
在一行中输出短句“Hello World!”。
输入样例:
无
输出样例:
Hello World!
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { printf("Hello World!"); } }
1-2 输出所有的水仙花数
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
输入格式:
无
输出格式:
153是一个水仙花数 370是一个水仙花数 371是一个水仙花数 407是一个水仙花数
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { println("153是一个水仙花数") println("370是一个水仙花数") println("371是一个水仙花数") println("407是一个水仙花数") } }
1-3 统计给定的 n 个整数中正数和负数的个数
统计给定的 n 个整数中正数和负数的个数
输入格式:
接收给定的多行数据(例:4 \n 56 \n 5 \n -10 \n 10,其中第一个数代表 n,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有)。
输出格式:
统计正数和负数的个数(注意第一个数无需统计)。
输入样例:
4 56 5 -10 10
输出样例:
正数个数:3 负数个数:1
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); var i = 0; var a = 0; var b = 0; while(i < n) { i += 1; var x = StdIn.readInt(); if(x > 0) a += 1; else if(x < 0) b += 1; } println("正数个数:"+a); println("负数个数:"+b); } }
1-4 计算除第一个数之外的所有非负整数之和
输入样例:
4 56 5 -10 10
输出样例:
71
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); var i = 0; var sum = 0; while(i < n) { i += 1; var x = StdIn.readInt(); if(x > 0) sum += x; } println(sum); } }
1-5 求差值
给定的 n 个整数中,计算每个x的平方根,然后再对该值求平方。现在,这个结果与x相差多少?
输入格式:
接收给定的多行数据(例:2 \n 5 \n 10,其中第一个数代表 n,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有)。
输出格式:
对每一组输入,在一行中输出差的值。
输入样例:
2 3 5
输出样例:
4.440892098500626E-16 -8.881784197001252E-16
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); var i = 0; while(i < n) { i += 1; var x = StdIn.readDouble(); var x1 = scala.math.sqrt(x); var x2 = scala.math.pow(x1,2); println(x - x2); } } }
二:第2章 控制结构和函数
2-1 分段函数
一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值
输入格式:
在一行中给出1个绝对值不超过1000的整数x。
输出格式:
对每一个输入,在一行中输出这个数的signum。
输入样例:
-299
输出样例:
-1
import scala.io.StdIn object Main { def f(x : Int) = { if(x > 0) 1 else if(x == 0) 0 else -1 } def main(args: Array[String]): Unit = { var n = StdIn.readInt(); print(f(n)) } }
2-2 字符串的乘积
编写一个for循环,计算字符串中所有字母的Unicode代码(toLong方法)的乘积。
输入格式:
在一行中给出1个长度不超过100的字符串。
输出格式:
在一行中输出字符串的乘积。
输入样例:
Hello
输出样例:
9415087488
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var sum:Long = 1; var s = StdIn.readLine(); for(c <- s) { var x = c.toLong; sum = sum * x; } println(sum); } }
2-3 求和中断
n以内的数求和,求出当和第一次大于m的当前数是多少?
输入格式:
输入在2行中分别给出2个不超过1000的正整数n和m。
输出格式:
对每一组输入,在一行中输出当和第一次大于m的当前数。
输入样例:
100 20
输出样例:
6
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); var m = StdIn.readInt(); var sum = 0; var t = 0; for(i <- 1 to n ) { sum += i; if(sum > m && t == 0) { print(i); t = 1; } } } }
2-4 求平均分
统计n个班成绩情况,每个班有m名同学,求出各个班的平均分和所有班级的平均分。
输入格式:
分别输入2个不超过10的正整数n和m,然后输入n*m个实数表示n个班m个学生的成绩。
输出格式:
对每一组输入,分别输出各个班的平均分和所有班级的平均分。
输入样例:
3 5 78 65 56 99 45 68 65 86 69 49 88 75 96 89 65
输出样例:
第1个班的平均成绩是68.60 第2个班的平均成绩是67.40 第3个班的平均成绩是82.60 所有平均成绩是72.87
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); var m = StdIn.readInt(); var ans = 0.0; for(i <- 1 to n) { var sum = 0.0; for(j <- 1 to m) { var x = StdIn.readDouble(); sum += x; } printf("第%d个班的平均成绩是%.2f\n",i,sum/m); ans += sum; } printf("所有平均成绩是%.2f",ans/n/m); } }
2-5 栗子和虫子
你买了一箱n个栗子,很不幸的是买完时箱子里混进了一条虫子。虫子每a小时能吃掉一个栗子,假设虫子在吃完一个栗子之前不会吃另一个,那么经过b小时你还有多少个完整的栗子?。
输入格式:
输入仅一行,包括n,a和b(均为整数)。
输出格式:
输出也仅一行,剩下的苹果个数。
输入样例:
10 4 7
输出样例:
8
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var line = StdIn.readLine().split(" "); var k = 0 var a = line(0).toInt; var b = line(1).toInt; var c = line(2).toInt; var x = c / b; if(c % b != 0) x += 1; if(x < a) print(a - x) else print(0) } }
2-6 动物
给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。
请你确定并输出这个动物的名称。
输入样例:
vertebrado ave onivoro • 1 • 2 • 3
输出样例:
pomba
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var a = StdIn.readLine(); var b = StdIn.readLine(); var c = StdIn.readLine(); if(a == "vertebrado") { if(b == "ave") { if(c == "carnivoro") print("aguia"); else print("pomba"); } else { if(c == "onivoro") print("homem"); else print("vaca"); } } else { if(b == "inseto") { if(c == "hematofago") print("pulga"); else print("lagarta"); } else { if(c == "hematofago") print("sanguessuga"); else print("minhoca"); } } } }
2-7 三角形类型
读取表示三角形三条边的3个浮点数(A,B和C)并按降序排列,使A边是三边中最大的一边。
接下来,根据以下情况,确定它们可以组成的三角形类型:
如果A≥B+C,则说明三条边不能构成三角形,请输出:NAO FORMA TRIANGULO
否则,说明三条边可以构成三角形,然后按如下情况输出:
如果A2=B2+C^2,请输出:TRIANGULO RETANGULO
如果A2>B2+C^2,请输出:TRIANGULO OBTUSANGULO
如果A2<B2+C^2,请输出:TRIANGULO ACUTANGULO
如果三个边长度都相同,请输出:TRIANGULO EQUILATERO
如果只有两个边长度相同而第三个边长度不同,请输出:TRIANGULO ISOSCELES
输入格式:
共一行,包含三个浮点数A,B,C(0<A,B,C<10.0)
输出格式:
输出A,B,C组成的三角形的类型。
注意,上述条件可能满足不止一条,这种情况下将所有类型名称,按题目介绍顺序输出,每行输出一条。
输入样例:
1.2 2.3 2.3
输出样例:
TRIANGULO ACUTANGULO TRIANGULO ISOSCELES
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var s = StdIn.readLine().split(" "); var a = s(0).toDouble; var b = s(1).toDouble; var c = s(2).toDouble; var t = 0.0; if(a < b){ t = a a = b b = t } if(a < c){ t = a a = c c = t } if(b < c){ t = b b = c c = t } if(a >= b + c) println("NAO FORMA TRIANGULO"); else { if(a*a == b * b + c * c) println("TRIANGULO RETANGULO"); else if(a * a > (b * b + c * c)) println("TRIANGULO OBTUSANGULO"); else println("TRIANGULO ACUTANGULO"); if(a == b && b == c) println("TRIANGULO EQUILATERO"); else if((a == b && b != c) || (a == c && a != b) || (b == c && a != b)) println("TRIANGULO ISOSCELES"); } } }
2-8 游戏时间
读取四个整数A,B,C,D,用来表示游戏的开始时间和结束时间。
其中A和B为开始时刻的小时和分钟数,C和D为结束时刻的小时和分钟数。
请你计算游戏的持续时间。
比赛最短持续1分钟,最长持续24小时。
输入格式:
共一行,包含四个整数A,B,C,D。0≤A,C≤23,
0≤B,D≤59
输出格式:
输出格式为“O JOGO DUROU X HORA(S) E Y MINUTO(S)”,表示游戏共持续了X小时Y分钟。
输入样例:
7 53 7 53 • 1
输出样例:
O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var s = StdIn.readLine().split(" ") var a = s(0).toInt var b = s(1).toInt var c = s(2).toInt var d = s(3).toInt var x = ((c * 60) + d) - ((a * 60) + b); if(!x) println("O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)") else { if(x < 0) x += (24*60) println("O JOGO DUROU "+(x/60)+" HORA(S) E "+(x%60)+" MINUTO(S)") } } }
2-9 判断闰年
判断某年是否是闰年。
输入格式:
输入只有一行,包含一个整数a(0 < a < 3000)
输出格式:
一行,如果公元a年是闰年输出Y,否则输出N
输入样例:
2006
输出样例:
N
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); if(n % 400 == 0 || n % 100 != 0 && n % 4 == 0) print("Y"); else print("N"); } }