设有n个顾客同时等待一个服务。顾客i需要的服务时间为ti(1<=i<=n)。共有s处可以提供此服务。应如何安排n个顾客的服务才能使平均等待时间达到最短?平均的带时间时n个顾客等待服务时间的总和除以n。
方法:先按从大到小排序,然后再挨个排队。
package 实验四;
import java.util.Arrays;
public class 等待时间最短 {
public static void main(String[] args) {
C c=new C();
c.run();
}
}
class C{
int [] t= {2,5,3,3,1,4,4,5}; //顾客的等待时间
int n=t.length; //顾客人数
int s=3; //服务的点数
int [][] shunxu=new int[s][n/3+1];
void run() {
int i,j;
Arrays.sort(t);
System.out.print("顾客的等待时间为:");
for(i=0;i<n;i++) {
System.out.print(t[i]+" ");
}
System.out.println();
int ss=0;
int count=0;
for(i=0;i<n;i++) {
shunxu[i%3][ss]=t[i];
count++;
if(count>2) {
ss++;
count=0;
}
}
for(i=0;i<s;i++) {
System.out.print("第"+i+"个点的服务顺序为:");
for(j=0;j<n/3+1;j++) {
if(shunxu[i][j]!=0)
System.out.print(shunxu[i][j]+" ");
}
System.out.println();
}
float [][] time=new float[s][10]; //等待时间表
for(i=0;i<s;i++) {
for(j=1;j<n/3+1;j++) {
if(shunxu[i][j]!=0) {
if(j==1)
time[i][j]=shunxu[i][j-1];
else {
time[i][j]=shunxu[i][j-1]+time[i][j-1];
}
}
}
}
System.out.println("等待时间表为:");
for(i=0;i<s;i++) {
for(j=0;j<n/3+1;j++) {
System.out.print(time[i][j]+" ");
}
System.out.println();
}
float time_all=0; //总的等待时间
for(i=0;i<s;i++) {
for(j=0;j<n/3+1;j++) {
time_all+=time[i][j];
}
}
System.out.println("总的时间为:"+time_all);
float time_avg=time_all/n;
System.out.println("等待的平均时间为:"+time_avg);
}
}
顾客的等待时间为:1 2 3 3 4 4 5 5
第0个点的服务顺序为:1 3 5
第1个点的服务顺序为:2 4 5
第2个点的服务顺序为:3 4
等待时间表为:
0.0 1.0 4.0
0.0 2.0 6.0
0.0 3.0 0.0
总的时间为:16.0
等待的平均时间为:2.0