7-1 作业调度算法--先来先服务 (100 分)
输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照先来先服务算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数)。
输入格式:
第一行输入作业数目,第二行输入作业的名字,第三行输入到达时间,第四行输入服务时间。
输出格式:
按照到达时间从小到大排序,第一行输出作业的名字,第二行输出到达时间,第三行输出服务时间,第四行输出完成时间,第五行输出完成时间,第六行输出带权周转时间。
输入样例:
在这里给出一组输入。例如
5
A B C D E
0 1 2 3 4
4 3 4 2 4
输出样例:
在这里给出相应的输出。例如:
作 业 名:A B C D E
到达时间:0 1 2 3 4
服务时间:4 3 4 2 4
完成时间:4 7 11 13 17
周转时间:4 6 9 10 13
带权周转时间:1.00 2.00 2.25 5.00 3.25
代码演示:
import java.util.*;
import java.util.Scanner;
public class Main {
static class Node {
private String name;//名称
private int A_time;//到达时间
private int S_time;//服务时间
private int F_time;//完成时间
private int T_time; //周转时间
private double D_time;//带权时间
public Node() {
}
public void setA_time(int a_time) {
A_time = a_time;
}
public void setS_time(int s_time) {
S_time = s_time;
}
public Node(String name) {
this.name = name;
}
}
private static void sort(ArrayList<Node> n, int i) {
Node temp;
for (int s = 0; s < i; s++) {
for (int j = s + 1; j < i; j++) {
if (n.get(s).A_time > n.get(j).A_time) {
Collections.swap(n, s, j);
}
}
}
}
public static void main(String[] args) {
ArrayList<Node> sites = new ArrayList<Node>();
Scanner in = new Scanner(System.in);
int i = in.nextInt();
for (int j = 0; j < i; j++) {
String next = in.next();
Node node = new Node(next);
sites.add(node);
}
for (Node node :
sites) {
node.A_time = in.nextInt();
}
for (Node node :
sites) {
node.S_time = in.nextInt();
}
sort(sites, i);
for (int x = 0; x < i; x++) {
if (x == 0) {
sites.get(0).F_time = sites.get(0).A_time + sites.get(0).S_time;
} else {
if (sites.get(x).A_time > sites.get(x - 1).F_time) {
sites.get(x).F_time = sites.get(x).A_time + sites.get(x).S_time;
} else {
sites.get(x).F_time = sites.get(x - 1).F_time + sites.get(x).S_time;
}
}
}
for (int j = 0; j < i; j++) {
sites.get(j).T_time = sites.get(j).F_time - sites.get(j).A_time;
}
for (int h = 0; h < i; h++) {
sites.get(h).D_time = 1.00 * sites.get(h).T_time / sites.get(h).S_time;
}
System.out.print("作 业 名:");
for (int j = 0; j < i; j++) {
if (j==i-1) {
System.out.print(sites.get(j).name);
break;
}
System.out.print(String.format(sites.get(j).name) + " ");
}
System.out.print("\n");
System.out.print("到达时间:");
for (int j = 0; j < i; j++) {
if (j==i-1) {
System.out.print(sites.get(j).A_time);
break;
}
System.out.print(sites.get(j).A_time+ " ");
}
System.out.print("\n");
System.out.print("服务时间:");
for (int j = 0; j < i; j++) {
if (j==i-1) {
System.out.print(sites.get(j).S_time);
break;
}
System.out.print(sites.get(j).S_time+ " ");
}
System.out.print("\n");
System.out.print("完成时间:");
for (int j = 0; j < i; j++) {
if (j==i-1){
System.out.print(sites.get(j).F_time);
break;
}
System.out.print(sites.get(j).F_time+ " ");
}
System.out.print("\n");
System.out.print("周转时间:");
for (int j = 0; j < i; j++) {
if (j==i-1){
System.out.print(sites.get(j).T_time);
break;
}
System.out.print(sites.get(j).T_time+ " ");
}
System.out.print("\n");
System.out.print("带权周转时间:");
for (int j = 0; j < i; j++) {
if (j==i-1) {
System.out.print(String.format("%.2f",sites.get(j).D_time));
break;
}
System.out.print(String.format("%.2f",sites.get(j).D_time)+" ");
}
}
}
运行结果: