问题描述:
马上就要过年啦!X星球决定给每个人发一份福利,不过这份福利需要排队去X星设置在各个地方的福利发放点领取,福利据说是一个神秘大礼包。
由于每个人在2021年为X星做出的贡献不一样,因此福利包中的礼物也不一样,领取福利所需要的时间也不一样。
现在有N个X星人到达了某一个福利发放点,很遗憾这个福利发放点只有一位工作人员在发放福利包,现在已知每个X星人领取福利包所需要时间(不包括排队等待时间,单位:分钟)。
为了让所有人的平均等待时间最少,需要你设计一个算法来安排领取顺序,请编写程序输出最少平均等待时间(单位:分钟),结果四舍五入保留两位小数。
输入:
单组输入,每组输入包含两行。
第1行输入一个正整数N,表示等待领取福利包的X星人的数量(N<=1000)。
第2行输入N个正整数,分别对应N个X星人每人领取福利包所需时间(单位:分钟),每个X星人的领取时间均不会超过100分钟。
输出:
输出最少平均等待时间(单位:分钟),结果四舍五入保留两位小数。
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = sc.nextInt();
}
if(n < 2){
System.out.println(0);
}else{
Arrays.sort(arr);
double sum = 0;
for(int i = 1; i < n; i++){
sum += sum(arr, i);
}
//格式化输出
DecimalFormat format3 = new DecimalFormat("0.00"); //四舍五入保留两位小数
System.out.println(format3.format((Math.round(100*sum/n))*0.01));
}
}
}
public static int sum(int[] arr, int p){
int sum = 0;
for(int i = 0; i < p; i++){
sum += arr[i];
}
return sum;
}
}