问题描述
设有 n 个顾客同时等待一项服务。顾客 i 需要的服务时间为 ni,1≤ti≤n。应如何安排 n 个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是 n 个顾客等待服务时间的总和除以 n 。
编程任务:对于给定的 n 个顾客需要的服务时间,编程计算最优服务次序。
算法思想
1. 使等待时间最短,肯定是优先服务办理业务所需时间单位最短的;
2. 将所有的顾客的服务时间进行排序(sort() 函数);
3. 第 n 号顾客等待的时间是其之前所有顾客办理业务的时间和,1号顾客等待时间为 0 。
C++ 代码如下(VC++ 6.0 实现,学校机房无 VS)
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
void main(){
while(1)
{
int q;
cout << "Please input the number of guests: " << endl; // 请求用户输入序列的个数
cin >> q;
cout << "Please input the time of each guest: " << endl;
int *a = new int[q]; // 动态分配数组大小,存储用户输入的每个序列的大小数值
for (int i = 0; i < q; i++)
{ cin >> a[i]; } // 读取用户输入的每个序列的大小数值
int sum=0; //排好序后所有顾客等待的最短时间和
sort(a,a+q); //对所有顾客的时间进行排序
for(int j = 1; j < q; j ++) //每一位排好序的顾客所等待的时间为前面所有顾客办理业务的总时间
{ a[j] += a[j-1]; }
for(int k = 0; k < q; k ++) //求和
{ sum += a[k]; }
cout << "最小平均等待时间为:" << sum/q << "个时间单位。" << endl;
cout << "______________________________________________________________" << endl;
delete[] a;
}
}
实验结果: