多处最优服务次序问题java代码

多处最优服务次序问题

  • 问题描述:

设有n个顾客同时等待一项服务,顾客i需要的服务时间为t[i]。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除n。

  • 算法设计:

对于给定的n个顾客需要的服务时间和s的值,计算最有服务次序。

  • 数据输入:

由文件input.txt给出输入数据。第一行有2个正整数n和s,表示有n个顾客且有s处提供顾客需要的服务。接下来
的一行中,有n个正整数,表示n个顾客需要的服务时间。

  • 结果输出:

将计算的最小平均等待时间输出到文件output.txt.

package TanXin;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class DuoChuZuiYouPaiXu {
	
	public static void main(String[] args) {
		try {
			BufferedReader reader = new BufferedReader(new FileReader("./input.txt"));
			BufferedWriter writer = new BufferedWriter(new FileWriter("./output.txt"));

			//从文件中读出信息
			String info = reader.readLine();
			String[] infos = info.split(" ");
			int n = Integer.parseInt(infos[0]);// 顾客数
			int s = Integer.parseInt(infos[1]);// 提供的服务数
//			System.out.println(n + " " + s);
			info = reader.readLine();
			//System.out.println(info);
			infos = info.split(" ");
			int[] time = new int[n]; // 每个顾客需要的服务时间
			for (int i = 0; i < infos.length; i++) {
				time[i] = Integer.parseInt(infos[i]);
			}
			
			// 冒泡排序(按时间进行排序)
			for (int i = 0; i < time.length; i++) {
				int temp = 0;
				for (int j = i + 1; j < time.length; j++) {
					if (time[i] > time[j]) {
						temp = time[i];
						time[i] = time[j];
						time[j] = temp;
					}
				}
			}
			
			// 进行排放
			int sum = 0;// 用来存放所有顾客的等待时间
			sum = sum + time[0] + time[1];// 先把第一二个人的时间加在上面
			int[] waitTime = new int[n];
			waitTime[0] = time[0];
			waitTime[1] = time[1];
			for(int i = 2; i < n; i++) {
				if(waitTime[i-2] < waitTime[i-1]){
					waitTime[i] = waitTime[i-2] + time[i];
				}else {
					waitTime[i] = waitTime[i-1] + time[i];
				}
				sum = sum + waitTime[i];
			}
			
			// 写入文件中
			int x = sum/n;
			// 可以用一下三种方式先把整数转化为string,再进行存储
//			writer.write(x + "");
//			writer.write(String.valueOf(x));
			writer.write(Integer.toString(x));
			writer.flush();


		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}

你可能感兴趣的:(算法)