操作系统作业先来先服务算法(FCFS)

 

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)+" ");
        }

    }

}

运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值