算法笔记 //09_最优服务次序问题

问题描述

    设有 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;

}
}

实验结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值