import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main{
// 小中大:
// 找出一组测试数据的最大值、中位数、最小值
// 这组测试数据升序or降序
// 要求:按照从大到小输出
// 可能出错的点:
// 1.存在相同数据项时的处理(对于该题而言即首尾两项相同)
// 2.输出格式的处理:对于该题只用考虑mid的输出格式
// 3./2的处理:1/2=0 1.0/2=0.5
// 在刚开始我使用的是位移运算符,但是位移运算符对于小数的处理与除是相同的,即1 >> 1会得到0
// 后来我给data.get(n >> 1)+data.get((n >> 1) - 1) 的部分*1.0以处理成浮点数,
// 却忽略了位移运算符只能给整数用
// (4.>> 位移运算符的优先级低于算数运算符)
public static void find(List<Integer> data,int n) {
// If升序
int max=0,min=0;
double mid=0;
if(data.get(0)<=data.get(n-1)) {//注意相等测试数据的处理
max=data.get(n-1);
min=data.get(0);
}
// If降序
else {
max=data.get(0);
min=data.get(n-1);
}
// 中位数
if(n%2==0) {
mid=(( data.get(n >> 1)+data.get((n >> 1) - 1) )*1.0) /2 ;
if( (mid-(int)mid) ==0)
System.out.println(max+" "+(int) mid+" "+min);
else System.out.printf("%d %.1f %d\n",max,mid,min);
}
else {
mid= data.get(n >> 1);//注意类型转换
System.out.println(max+" "+(int) mid+" "+min);
}
}
public static void main(String[] args) {
int n=0;
List<Integer> data=new ArrayList<Integer> ();
// 处理输入
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try {
n=Integer.parseInt(br.readLine());
String[] s=br.readLine().split(" ");
for(String c:s) data.add(Integer.parseInt(c));
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
find(data,n);
}
}
ccfcsp-20190301小中大-JAVA语言
最新推荐文章于 2021-03-11 17:42:02 发布