7-1 作业调度算法–先来先服务 (100 分)
#include<stdio.h>
#include<stdlib.h>
struct work{
char name[10]; //作业名称
int Atime; //到达时间
int Stime; //服务时间
int Ftime; //完成时间
int Rtime; //周转时间
double DRtime; //带权周转时间
};
int main(void){
int N; //输入N个作业
scanf("%d",&N);
struct work s[N];
for(int i=0; i<N; i++) //输入作业名字
scanf("%s",&s[i].name);
for(int i=0; i<N; i++) //输入作业到达时间
scanf("%d",&s[i].Atime);
for(int i=0; i<N; i++) //输入作业服务时间
scanf("%d",&s[i].Stime);
for(int i=0; i<N-1; i++) //按到达时间排序
{
struct work temp;
for(int j=i+1; j<N; j++)
{
if(s[i].Atime>s[j].Atime)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
for(int i=0; i<N; i++) //计算完成时间
{
if(i==0)
s[0].Ftime=s[0].Atime+s[0].Stime;
else{
if(s[i].Atime>s[i-1].Ftime)
s[i].Ftime=s[i].Atime+s[i].Stime;
else
s[i].Ftime=s[i-1].Ftime+s[i].Stime;
}
}
for(int i=0; i<N; i++) //计算周转时间
s[i].Rtime=s[i].Ftime-s[i].Atime;
for(int i=0; i<N; i++) //计算带权周转时间
s[i].DRtime=1.0*s[i].Rtime/s[i].Stime;
printf("作 业 名:"); //输出
for(int i=0; i<N; i++)
{
if(i==N-1)
{
printf("%s",s[N-1].name);
printf("\n");
}
else
printf("%s ",s[i].name);
}
printf("到达时间:");
for(int i=0; i<N; i++)
{
if(i==N-1)
{
printf("%d",s[N-1].Atime);
printf("\n");
}
else
printf("%d ",s[i].Atime);
}
printf("服务时间:");
for(int i=0; i<N; i++)
{
if(i==N-1)
{
printf("%d",s[N-1].Stime);
printf("\n");
}
else
printf("%d ",s[i].Stime);
}
printf("完成时间:");
for(int i=0; i<N; i++)
{
if(i==N-1)
{
printf("%d",s[N-1].Ftime);
printf("\n");
}
else
printf("%d ",s[i].Ftime);
}
printf("周转时间:");
for(int i=0; i<N; i++)
{
if(i==N-1)
{
printf("%d",s[N-1].Rtime);
printf("\n");
}
else
printf("%d ",s[i].Rtime);
}
printf("带权周转时间:");
for(int i=0; i<N; i++)
{
if(i==N-1)
{
printf("%.2f",s[N-1].DRtime);
printf("\n");
}
else
printf("%.2f ",s[i].DRtime);
}
return 0;
}