1. 程式人生 > >演算法筆記 //09_最優服務次序問題

演算法筆記 //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; } }

實驗結果:
這裡寫圖片描述