问题描述:现有一个内存为100K的采用位示图进行页面管理的道数不受限制的多道程序设计系统,若作业调度采用高优先级(优先数越大优先级越大)调度算法(如果遇到优先级一样且只能调入一道作业时,按照输入顺序选择调度对象。),进程调度采用非剥夺式的SJF调度算法(如果遇到运行时间相同的进程,按照输入顺序选择调度对象。)。要求输入3个进程信息,输出当三个作业同时提交进入调度时进程的运行顺序。
输入格式:程序要求输入3行,以回车符号作为分隔,每行有4个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名;第2个数据类型为整型,表示进程所需的内存空间;第3个数据类型为整型,表示进程的运行时间;第4个数据类型为整型,表示进程的优先数。
输出格式:输出1行,M个字符串,字符串之间用空格作为分隔。
样例输入1:
P1 20 2 1
P2 60 3 2
P3 30 4 3
样例输出1:
P2 P1 P3
样例输入2:
P1 80 2 2
P2 30 5 3
P3 40 3 1
样例输出2:
P3 P2 P1
#include<stdio.h>
#include<time.h>
clock_t start,stop;
double runtime;
int mspace=100;//总的内存空间数
struct process{
char pname[10];//进程名
int sspace;//占用空间数
int rtime;//运行时间
int priority;//优先数
}p[3];
int main(){
start=clock();
struct process x[3];
int index; //标志位
for(int i=0; i<3; i++){
scanf("%s %d %d %d",p[i].pname,&p[i].sspace,&p[i].rtime,&p[i].priority);
}
for(int i=0; i<3; i++){
for(int j=i+1; j<3; j++){
if(p[i].priority<p[j].priority){
struct process temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
/*
for(int i=0; i<3; i++){
printf("%s ",p[i].pname);
}*/
for(int i=0; i<3; i++){
if(mspace>=p[i].sspace){
mspace-=p[i].sspace;
for(int j=i; j<i+1; j++){
x[j]=p[i];
index=i;
}
if(index>0){
if(x[i-1].rtime>x[i].rtime){
struct process temp=x[i];
x[i]=x[i-1];
x[i-1]=temp;
mspace+=x[i-1].sspace;
}else{
mspace+=x[i-1].sspace;
}
}
}else{
if(i<2){
struct process temp=p[i+1];
p[i+1]=p[i];
p[i]=temp;
i--;
}else{
x[2]=p[2];
mspace+=x[i-1].sspace;
i--;
break;
}
}
}
printf("%s %s %s",x[0].pname,x[1].pname,x[2].pname);
stop=clock();
runtime=((double)(stop-start));
printf("\n%lfs",runtime);
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。
解决没?