问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,1≤i≤n。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。
1.贪心算法解决
代码如下:
package 算法设计与分析;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class 最优服务次序问题 {
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
System.out.print("请输入排队顾客数:");
int n = inScanner.nextInt();//排队人数
int[] a = new int[n+1];
System.out.print("请输入每位顾客所需时间:");
for (int i = 1; i <= n; i++) {
a[i] = inScanner.nextInt();
}
Solve(n, a);
}
public static void Solve(int m,int b[]) {
float sum = 0;
Arrays.sort(b);//所需时间短的排在前面,先服务,这样平均等待时间少
for (int i = 1; i < m; i++) {
b[i+1] = b[i]+b[i+1];//第一位不用等待,第二位等待时间为b[1]这里b[1]没改变,这里计算第三位及后面等待时间
}
for (int i = 1; i < m; i++) {//这里不用i<=m,但要得到书上的结果可能需要改为i<=m
sum += b[i];//将每个人的等待时间加起来,及等待时间和
}
System.out.print(sum/m);
}
}
输入输出示例:
学习中,欢迎交流