7-6 作品评分 (10 分)
全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。
输入格式:
输入数据包括两行: 第一行为n,表示n个评委,n>2。 第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。
输出格式:
输出平均分,结果保留两位小数。
输入样例:
6
10 9 8 7.9 9 9.5
输出样例:
8.88
这个题一开始用输入一个n,然后输入n的数(一个一个地输入)结果超时了,后来发现直接用字符串读一行,注意这里第一行就一个数n也要用字符串读这一行(为了读掉末尾的换行符,因为下一行用字符串读一行时,如果上一行末尾有换行符也会读进去,就会导致少一个有效字符),然后处理一下字符串(提取有效数据)就行了。~~~可能本题还有更简单的做法,但由于本蒟蒻作为Java初学者,当前能力和见识有限,就先这么做了~~~
这里主要用到了以下三种语句:
1、用Scanner类读一行字符串(包含空格、回车等):
String s=scan.nextLine();
2、将字符串强制转化成int/double型:
String n=scan.nextLine();
int x=Integer.parseInt(n);//将字符串n强制转化成int型赋给x
int y=Integer.parseInt(n);//将字符串n强制转化成double型赋给y
3、截取字符串中的一段:
String ss=s.substring(cnt,i);//截取字符串s中从编号为cnt的位置到编号为i的位置(前闭后开)的字符串,然后赋给ss
完整代码:
package test01;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
String n=scan.nextLine();//注意这里就一个数n也要用字符串读一行(为了读掉末尾的换行符,因为下一行用字符串读一行时如果上一行末尾有换行符也会读进去,就会导致少一个有效字符)
String s=scan.nextLine();
int len=s.length();
double sum=0,aver=0,maxn=-1,minn=0x3f3f3f3f;
int cnt=0;
int x=Integer.parseInt(n);
while(cnt<len) {
int flag=0;//用flag来判断当前字符串后面有无空格,以区分最后一个子串(最后一个子串后面无空格)
for(int i=cnt;i<len;i++) {
if(s.charAt(i)==' ') {
flag=1;
String ss=s.substring(cnt,i);
double q=Double.parseDouble(ss);
if(q>maxn)
maxn=q;
if(q<minn)
minn=q;
sum+=q;
cnt=i+1;
break;
}
}
if(flag==0) {//flag=0说明已经到了最后一个有效数据
String ss=s.substring(cnt,len);
Double q=Double.parseDouble(ss);
if(q>maxn)
maxn=q;
if(q<minn)
minn=q;
sum+=q;
break;
}
}
aver=(sum-minn-maxn)/(x-2);
System.out.printf("%.2f\n",aver);
}
}
扫描二维码关注公众号,回复:
8735596 查看本文章