作业调度算法--短作业优先 操作系统_处理器管理_编程题

操作系统_处理器管理_编程题
作业调度算法–短作业优先

输入N个作业,输入每个的作业名字,到达的时间,服务的时间,根据短作业优先算法,计算出每个作业的完成的时间,周转的时间,带权周转的时间(其中保留2位小数)。

输入的格式:
第1行输入作业的数目,第2行输入作业名字,第3行输入到达的时间,第4行输入服务的时间。

输出的格式:
根据到达的时间由小到大排序,第1行输出作业名字,第2行输出到达的时间,第3行输出服务的时间,第4行输出完成的时间,第5行输出完成的时间,第6行输出带权周转的时间。

输入的样例:
给出了1组输出。如下:

5
A B C D E
0 1 2 3 4
4 3 1 2 4

输出的样例:
给出了相应输出。如下:

作 业 名:A B C D E
到达时间:0 1 2 3 4
服务时间:4 3 1 2 4
完成时间:4 10 5 7 14
周转时间:4 9 3 4 10
带权周转时间:1.00 3.00 3.00 2.00 2.50

代码

#include <bits/stdc++.h>
using namespace std;

struct  process{
    char name[16];
    double C_T;  
    double R_T;
    double F_T;
    double cir_T;
    double W_C;
    int  finished;
}Process[1024];

int n; 
void Input(){ 
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>Process[i].name;
		Process[i].finished = 0;
    }
    for(int i=0;i<n;i++){
        cin>>Process[i].C_T;
    }
    for(int i=0;i<n;i++){
        cin>>Process[i].R_T;
    }
}
//输出 
void Output(){
    printf("作 业 名:");
    for(int i=0;i<n;i++){
        
		cout<<Process[i].name;
		if(i<n-1){
			printf(" "); 
		}
    }
    printf("\n");
    printf("到达时间:");
    for(int i=0;i<n;i++){
        cout<<Process[i].C_T;
        	if(i<n-1){
			printf(" "); 
		}
	}
		
    
    printf("\n");
    printf("服务时间:");
    for(int i=0;i<n;i++){
        cout<<Process[i].R_T;
        	if(i<n-1){
			printf(" "); 
		}
	}

    printf("\n");
    printf("完成时间:");
    for(int i=0;i<n;i++){
        cout<<Process[i].F_T; 
        	if(i<n-1){
			printf(" "); 
		}
		}
    
    printf("\n");
    printf("周转时间:");
    for(int i=0;i<n;i++){
        cout<<Process[i].cir_T;
        	if(i<n-1){
			printf(" "); 
		}
		}
    
    printf("\n");
    printf("带权周转时间:");
    for(int i=0;i<n;i++){
       printf("%.2f",Process[i].W_C);
	    if(i < n-1) {
			printf(" ");
			}
    }
    
}
bool cmp(process p1,process p2){     
	    return p1.C_T<p2.C_T;
}
int main(){
	Input();
	sort(Process,Process+n,cmp);
	int finished_count = 0; 
	int unfinish_pos = 0; 
	double now_time;
	while(finished_count<n){
		if(now_time<Process[unfinish_pos].C_T){ 
			now_time = Process[unfinish_pos].C_T; 
		}
		double min_R_T = INT_MAX; 
		int pos = 0; 		
		for(int i = unfinish_pos;(i < n && now_time >= Process[i].C_T);i++){ 
			if(Process[i].finished == 1) continue ;
			if(Process[i].R_T < min_R_T){
				min_R_T = Process[i].R_T;
				pos = i;
			}
		}
		{
			now_time += Process[pos].R_T; 
			Process[pos].F_T = now_time;
			Process[pos].cir_T = now_time - Process[pos].C_T;
			Process[pos].W_C = Process[pos].cir_T / Process[pos].R_T;
			Process[pos].finished = 1;
			if(pos == unfinish_pos){ 
				unfinish_pos = pos + 1;
			} 
			finished_count++;
			
		}
		
	}
	Output();
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Code_King1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值