B:题目2:进程调度2--最高响应比优先计算每个作业的周转时间

问题描述:要求输入3个进程的信息,按照最高响应比优先的调度算法计算并输出每个进程的周转时间。(若两个进程的响应比相同,则优先选择先进入的进程。若两个进程的响应比相同,而且进入时刻也相同,则按照输入的顺序执行,如:P4和P6的响应比相同且进入时刻也相同,如P4先输入则选择P4先执行)

输入格式:程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的进入时刻,第3个数据类型为整型,表示进程的运行时间。

输出格式:输出三个整数之间,整数之间用空格作为分隔,为每个进程的周转时间。

样例输入1:

P1 1 1

P2 2 2

P3 3 3

样例输出1:

1 2 4



import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int number=1;
        youxianji P1= new youxianji();
        P1.name= scanner.next();//P1的程序名
        P1.inTime= scanner.nextDouble();//P1的进入时间
        P1.order=(double)number;
        P1.workTime= scanner.nextDouble();//P1的运行时间

        youxianji P2=new youxianji();
        P2.name= scanner.next();//P1的程序名
        P2.inTime= scanner.nextDouble();//P1的进入时间
        P2.order=(double)++number;
        P2.workTime= scanner.nextDouble();//P1的运行时间

        youxianji P3=new youxianji();
        P3.name= scanner.next();//P1的程序名
        P3.inTime= scanner.nextDouble();//P1的进入时间
        P3.order=(double)++number;
        P3.workTime= scanner.nextDouble();//P1的运行时间


        double arry[][]=new double[3][3];

        if((P1.inTime>P2.inTime&& P2.inTime== P3.inTime)||(((P1.inTime== P2.inTime)&&(P2.inTime==P3.inTime))&&
                (P1.workTime> P2.workTime&&P1.workTime>P3.workTime))){
            P2.waitTime=0;P3.waitTime=0;
            if(P2.Calculate(0, P2.workTime)< P3.Calculate(0, P3.workTime)){
                P3.finishTime= P3.finishTime(P3.inTime, P3.workTime);
                arry[2][2]= P3.allTime(P3.finishTime,P3.inTime);

                P2.finishTime= P2.finishTime(P3.finishTime, P2.workTime);
                arry[1][2]=P2.allTime(P2.finishTime,P2.inTime);

                P1.finishTime= P1.finishTime(P2.finishTime, P1.workTime);
                arry[0][2]=P1.allTime(P1.finishTime, P1.inTime);

            } else if (P2.Calculate(0, P2.workTime)> P3.Calculate(0, P3.workTime)) {
                P2.finishTime= P2.finishTime(P2.inTime, P2.workTime);
                arry[1][2]=P2.allTime(P2.finishTime,P2.inTime);

                P3.finishTime= P3.finishTime(P2.finishTime, P3.workTime);
                arry[2][2]= P3.allTime(P3.finishTime,P3.inTime);

                P1.finishTime= P1.finishTime(P3.finishTime, P1.workTime);
                arry[0][2]=P1.allTime(P1.finishTime, P1.inTime);
            } else if (P2.Calculate(0, P2.workTime)==P3.Calculate(0, P3.workTime)) {
                if(P2.order<P3.order){
                    P2.finishTime= P2.finishTime(P2.inTime, P2.workTime);
                    arry[1][2]=P2.allTime(P2.finishTime,P2.inTime);

                    P3.finishTime= P3.finishTime(P2.finishTime, P3.workTime);
                    arry[2][2]= P3.allTime(P3.finishTime,P3.inTime);

                    P1.finishTime= P1.finishTime(P3.finishTime, P1.workTime);
                    arry[0][2]=P1.allTime(P1.finishTime, P1.inTime);
                } else if (P2.order> P3.order) {
                    P3.finishTime= P3.finishTime(P3.inTime, P3.workTime);
                    arry[2][2]= P3.allTime(P3.finishTime,P3.inTime);

                    P2.finishTime= P2.finishTime(P3.finishTime, P2.workTime);
                    arry[1][2]=P2.allTime(P2.finishTime,P2.inTime);

                    P1.finishTime= P1.finishTime(P2.finishTime, P1.workTime);
                    arry[0][2]=P1.allTime(P1.finishTime, P1.inTime);
                }
            }

        } else {
            P1.waitTime = 0;//等待时间
            P1.finishTime = P1.finishTime(P1.inTime, P1.workTime);//完成时间

            arry[0][2] = P1.allTime(P1.finishTime, P1.inTime);//周转时间

            P2.waitTime = P1.finishTime - P2.inTime;//等待时间
            P2.xyb = (P2.waitTime + P2.workTime) / P2.workTime;


            P3.waitTime = P1.finishTime - P3.inTime;//等待时间
            P3.xyb = (P3.waitTime + P3.workTime) / P3.workTime;

            if ((P2.xyb > P3.xyb) || ((P2.xyb == P3.xyb) && (P2.inTime < P3.inTime))) {
                P2.finishTime = P2.finishTime(P1.finishTime, P2.workTime);//完成时间
                arry[1][2] = P2.allTime(P2.finishTime, P2.inTime);//周转时间

                P3.finishTime = P3.finishTime(P2.finishTime, P3.workTime);//完成时间
                arry[2][2] = P3.allTime(P3.finishTime, P3.inTime);//周转时间
            } else if ((P2.xyb < P3.xyb) || ((P2.xyb == P3.xyb) && (P2.inTime > P3.inTime))) {
                P3.finishTime = P3.finishTime(P1.finishTime, P3.workTime);//完成时间
                arry[2][2] = P3.allTime(P3.finishTime, P3.inTime);//周转时间

                P2.finishTime = P2.finishTime(P3.finishTime, P2.workTime);//完成时间
                arry[1][2] = P2.allTime(P2.finishTime, P2.inTime);//周转时间


            } else if (P2.xyb == P3.xyb && P2.inTime == P3.inTime) {
                if (P2.order < P3.order) {
                    P2.finishTime = P2.finishTime(P1.finishTime, P2.workTime);//完成时间
                    arry[1][2] = P2.allTime(P2.finishTime, P2.inTime);//周转时间

                    P3.finishTime = P3.finishTime(P2.finishTime, P3.workTime);//完成时间
                    arry[2][2] = P3.allTime(P3.finishTime, P3.inTime);
                }//周转时间
                else {
                    P3.finishTime = P3.finishTime(P1.finishTime, P3.workTime);//完成时间
                    arry[2][2] = P3.allTime(P3.finishTime, P3.inTime);//周转时间

                    P2.finishTime = P2.finishTime(P3.finishTime, P2.workTime);//完成时间
                    arry[1][2] = P2.allTime(P2.finishTime, P2.inTime);//周转时间

                }
            }
        }
        for(int i=0;i<3;i++){
            System.out.print((int)arry[i][2]);
            if(i!=2){
                System.out.print(" ");
            }
        }
    }
}
class youxianji{//计算响应比
    String name;
    double inTime;//进入时刻
    double workTime;//运行时间
    double waitTime;//等待时间
    double finishTime;//完成时间
    double allTime;//周转时间=完成时间-进入时间

    double xyb;//响应比
    double order;//进入顺序
    public youxianji(String name, double inTime, double workTime) {
        this.name = name;
        this.inTime = inTime;
        this.workTime = workTime;
    }
    public youxianji(){};



    public double Calculate(double waitTime,double workTime){//计算响应比
        return(waitTime+workTime)/workTime;

    }
    public double finishTime(double inTime,double workTime){
        return inTime+workTime;
    }
    public double allTime(double finishTime,double inTime){
        return finishTime- inTime;
    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇治小抹茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值