输入格式:全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。
输入数据包括两行: 第一行为n,表示n个评委,n>2。
第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。
输出格式:
输出平均分,结果保留两位小数。
输入样例:
6
10 9 8 7.9 9 9.5
输出样例:
8.88
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int num=0;
Scanner in = new Scanner(System.in);
num=in.nextInt();
double grade=0;
double min=0;
double max=0;
double sum=0;
for(int i=0;i<num;i++)
{
grade=in.nextDouble();
sum+=grade;
if(i==0)
{
min=grade;
max=grade;
}
if(grade<min)
min=grade;
if(grade>max)
max=grade;
}
System.out.printf("%.2f", (sum-min-max)/(num-2));
}
}
测试点 | 结果 | 分数 | 耗时 | 内存 |
---|---|---|---|---|
0 | 答案正确 | 2 | 139 ms | 19092 KB |
1 | 运行超时 | 0 | -- | 42732 KB |
2 | 运行超时 | 0 | -- | 40036 KB |
3 | 运行超时 | 0 | -- | 40456 KB |
4 | 答案正确 | 2 | 246 ms | 23216 KB |
运行超时原因:用nextDouble()方法一个一个读,时间过长。
解决:用String[] s = in.nextLine().split(" ");(以空格为分隔,读入一个string数组)一次读入一行,再用Float.valueOf()转换成float类型读入成绩.
正确代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int num=0;
Scanner in = new Scanner(System.in);
num=in.nextInt();
in.nextLine();//nextInt();接收一个整型字符,不会读取\n,nextline();读入一行文本,会读
//入"\n"字符。
double grade=0;
double min=20;
double max=0;
double sum=0;
String[] s = in.nextLine().split(" ");
for(String str : s)
{
grade=Float.valueOf(str);
sum+=grade;
if(grade<min)
min=grade;
if(grade>max)
max=grade;
}
System.out.printf("%.2f", (sum-min-max)/(num-2));
}
}