本文共 1823 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要找到一种排队顺序,使得n个人的平均等待时间最小。根据短作业优先调度算法,我们可以确定处理时间较短的人应该排在前面,以减少整体的平均等待时间。
import java.util.Arrays;import java.util.Comparator;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] times = new int[n]; for (int i = 0; i < n; i++) { times[i] = in.nextInt(); } Muta[] mutas = new Muta[n]; for (int i = 0; i < n; i++) { mutas[i] = new Muta(times[i], i + 1); } Arrays.sort(mutas, new Comparator() { @Override public int compare(Muta a, Muta b) { if (a.v != b.v) { return Integer.compare(a.v, b.v); } else { return Integer.compare(a.o, b.o); } } }); StringBuilder orderStr = new StringBuilder(); for (Muta m : mutas) { orderStr.append(m.o).append(" "); } System.out.println(orderStr.toString().trim()); double total = 0; double sum = 0; for (Muta m : mutas) { total += sum; sum += m.v; } System.out.println(String.format("%.2f", total / n)); } static class Muta { int v; int o; Muta(int v, int o) { this.v = v; this.o = o; } }}
转载地址:http://hwcb.baihongyu.com/