仅供参考,有更好的方法请评论,有错误请指出,谢谢!
问题描述:要求输入3个进程的信息,假设这些进程均是在0时刻同时到达,若进程调度采用非剥夺式静态优先级(优先数数值大的表示优先级比较高;如果遇到优先级一样,按照输入顺序执行。),计算并输出平均作业周转时间。
输入格式:程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的优先数,第3个数据类型为整型,表示进程的运行时间。
输出格式:输出结果为一个浮点数,保留到小数点后一位,为系统的平均作业周转时间。
样例输入1:
P1 1 1
P2 2 2
P3 3 3
样例输出1:
4.7
样例输入2:
P1 10 10
P2 100 100
P3 100 100
样例输出2:
170.0
#include
#include
#include
struct PROCESS
{
char PROCESS_NAME[10]; //进程名
int SPN; //优先数
int PTIME; //运行时间
};
int main()
{
struct PROCESS process[3];
int i,j,avag_time=0;
for(i=0;i<3;i++)
scanf("%s %d %d",&process[i].PROCESS_NAME,&process[i].SPN,&process[i].PTIME);
//优先级排序
for(i = 0;i<3;i++)
{
for(j = 0;j<2-i;j++)
{
struct PROCESS temp;
if(process[j+1].SPN>process[j].SPN)
{
temp = process[j];
process[j] = process[j + 1];
process[j + 1] = temp;
}
}
}
for(i=0;i<3;i++)
{
int time;
if(i==0)
time=process[i].PTIME;
else if(i==1)
time=process[i].PTIME+process[i-1].PTIME;
else
time = process[i].PTIME+process[i-1].PTIME+process[i-2].PTIME;
avag_time+=time;
}
printf("%.1f",avag_time/3.0);
system("pause");
return 0;
}
def time(Process, n):
ttime = 0
for i in range(n):
ttime += int(Process[i][2])
return ttime
if __name__ == '__main__':
Process = []
Time = []
for i in range(3):
Process.append(input().split())
Process.sort(key=lambda Process: Process[1], reverse=True)
for i in range(3):
Time.append(time(Process, i+1))
print('%.1f' % float(sum(Time)/3))
问题描述:要求输入3个进程的信息,按照最高响应比优先的调度算法计算并输出每个进程的周转时间。(若两个进程的响应比相同,则优先选择先进入的进程。若两个进程的响应比相同,而且进入时刻也相同,则按照输入的顺序执行,如:P4和P6的响应比相同且进入时刻也相同,如P4先输入则选择P4先执行)
输入格式:程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的进入时刻,第3个数据类型为整型,表示进程的运行时间。
输出格式:输出三个整数之间,整数之间用空格作为分隔,为每个进程的周转时间。
样例输入1:
P1 1 1
P2 2 2
P3 3 3
样例输出1:
1 2 4
样例输入2:
P1 1 4
P2 2 8
P3 3 1
样例输出2:
4 12 3
#include
#include
struct PROCESS
{
char PROCESS_NAME[10];
int atime;
int rtime;
int ttime;
int X;
float Response_ratio;
};
int main()
{
struct PROCESS p[3];
for (int i=0;i<3;i++)
{
scanf("%s %d %d",&p[i].PROCESS_NAME,&p[i].atime,&p[i].rtime);
p[i].X=i+1;
}
struct PROCESS temp;
int nowtime=p[0].atime;
int sign=0;
int flag=0;
int m=0;
int n=0;
for(int i=1;i<3;i++)
{
if(p[i].atime==nowtime)
{
if(p[i].rtime<p[sign].rtime)
{
sign=i;
nowtime=p[i].atime;
temp=p[i];
p[i]=p[0];
p[0]=temp;
}
}
else if(p[i].atime<nowtime)
{
sign=i;
nowtime=p[i].atime;
temp=p[i];
p[i]=p[0];
p[0]=temp;
}
}
while (1)
{
if(p[m].atime>=n)
{
p[m].ttime=p[m].rtime;
n=p[m].atime+p[m].rtime;
}
else
{
p[m].ttime=p[m].rtime+n-p[m].atime;
n+=p[m].rtime;
}
for(int i=1;i<3;i++)
{
p[i].Response_ratio=(float)(n-p[i].atime)/p[i].rtime;
}
m++;
if(m==3)
{
break;
}
if(flag==0)
{
if(p[1].Response_ratio>=p[2].Response_ratio)
{
if(p[1].Response_ratio==p[2].Response_ratio)
{
if(p[1].X>p[2].X)
{
temp=p[1];
p[1]=p[2];
p[2]=temp;
}
}
}
else
{
temp=p[1];
p[1]=p[2];
p[2]=temp;
}
flag=1;
}
}
for(int i=0;i<2;i++)
{
for(int j=1;j<3;j++)
{
if(p[i].X>p[j].X)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
for(int i=0;i<3;i++)
{
printf("%d ",p[i].ttime);
}
}
下面的有些许问题:(请在评论区提出错误,不甚感激!)
#include
#include
struct PROCESS
{
char PROCESS_NAME[10]; //进程名
int atime; //到达时间
int rtime; //运行时间
int ttime; //周转时间
int X; //进程编号
float Response_ratio; //响应比
int state; //执行状态 1表示已经执行
};
void HRRF(struct PROCESS *p)
{
int count = 0; //记录已经完成的进程数
int position = 0; //记录未完成进程的位置
int nowtime = 0; //现在的时刻
while (count < 3)
{
float max_rp = 0;