201903-1_小中大
时间限制: 1.0s
内存限制: 512.0MB
题目背景
在数据分析中,最小值最大值以及中位数是常用的统计信息。
题目描述
老师给了你 n n n个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重复的数据。请统计出这组测量数据的最大值、中位数以及最小值,并按照从大到小的顺序输出这三个数。
输入格式:
从标准输入读入数据。
第一行输入一个整数n,在第二行中存在n个有序的整数,表示测量数据,可能为升序或降序排列,可能存在连续多个整数相等,整数与整数之间使用空格隔开。
输出格式:
输出到标准输出。
包含一行,包括最大值、中位数以及最小值共三个数,并按照从大到小的顺序输出。数据与数据之间使用空格隔开。对与整数请直接输出整数,对于可能出现的分数,请输出四舍五入保留1位小数的结果。
样例1:
输入
3
-1 2 4
输出:
4 2 -1
解释
4为最大值,2为中位数,-1为最小值。
样例2:
输入
4
-2 -1 3 4
输出:
4 1 -2
解释
4为最大值, ( − 1 + 3 ) ÷ 2 = 1 (-1 + 3) ÷ 2 = 1 (−1+3)÷2=1为中位数,-2为最小值。
子任务
想法
四舍五入,整数之和除二只有两种可能0或者0.5
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[] num;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double med;
int temp;
int n=sc.nextInt();
num=new int[n];
for(int i=0;i<n;i++) {
num[i]=sc.nextInt();
}
Arrays.sort(num);
if(n%2==0) {
med=(double)((num[(n-1)/2]+num[(n-1)/2+1]))/2;
temp=(int)(med*100);
if(temp%100==0) {
System.out.printf("%d %d %d",num[n-1],(int)med,num[0]);
}else {
System.out.printf("%d %.1f %d",num[n-1],med,num[0]);
}
}else {
med=num[n/2];
System.out.printf("%d %d %d",num[n-1],(int)med,num[0]);
}
}
}