1. 程式人生 > >Java(顧客最短等待時間)

Java(顧客最短等待時間)

題目如下:

設有n個顧客同時等待一項服務。顧客i需要的服務時間為ti(1<i<n),共有s處可以提供此項服務。應如何安排n個顧客的服務次序才能使得平均等待時間達到最小?平均等待時間是n個顧客等待時間的總和除以n。

程式碼如下:

package TXSF;

import java.util.Scanner;

public class ZY {
	public static void main(String args[]){
		int i,j;
		int n,s;
		Scanner scanner = new Scanner(System.in);
		System.out.println("請輸入顧客人數:");
		n = scanner.nextInt();
		System.out.println("請輸入服務點數:");
		s = scanner.nextInt();
		int[] a = new int[n];//儲存每個顧客的等待時間
		int[] b = new int[n];//儲存服務點
		int[] c = new int[n];//儲存服務等待時間
		System.out.println("請輸入每個顧客的等待時間:");
		for(i = 0; i < n; i++){
			a[i] = scanner.nextInt();
		}
		JS(a,b,c,n,s);
	}
	
	public static void JS(int a[],int b[],int c[],int n,int s){
		int temp;
		int time = 0;
		int e = 0, f = 0;
		for(int i = 0; i < a.length; i++){
			for(int j = i+1; j < a.length; j++){
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
		while(e < n)  
	    {  
	        b[f] += a[e];  
	        c[f] += b[f];      //C[i] 儲存每個顧客的等待時間  
	        e++;  
	        f++;  
	        if(f == s)         //安排s個服務點的活動  
	        {  
	            f = 0;  
	        }  
	    }
		for(int w = 0; w < s; w++){  
	        time += c[w];
		}
		//time = time/2*n;
		System.out.println("總等待時間為:"+time);
	}
}