问题描述:要求输入 N 个进程( N 为正整型数,0< N <=25535),输出按照优先级从高到低执行的进程名字符串序列,直至结束。(如果遇到优先级一样,按照输入顺序先后执行。),本题中,优先数数值较高的进程,优先级也较高。
输入格式:程序首先要求输入一个整型变量 N ,接下来输入为 N 行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),该字符串为进程名。第2个数据类型为整型,表示进程的优先数。第3个数据类型为整型,表示进程的运行时间。
输出格式:输出1行, M 个字符串,字符串之间用空格作为分隔。
样例输入1:
3
P1 1 1
P2 2 2
P3 3 3
样例输出1:
P3 P2 P3 P1 P2 P3
样例输入2:
2
P1 3 3
P2 1 1
样例输出2:
P1 P1 P1 P2
#include<stdio.h>
#include<vector>
using namespace std;
typedef struct PCB{
char name[10]; //进程名
int yxji; //优先级
int ytime; //运行时间
int flag; //运行状态
}PCB; //定义一个进程的结构体
int judge(vector<PCB> a)
{
int i,m=0;
for(i=1;i<a.size();i++)
{
if(a[i].flag==1&&a[m].yxji<a[i].yxji)
m=i;
else if(a[i].flag==2)
m=-1;
}
return m;
}
int main(){
int m=0,i=0,j,b,n;
PCB p;
vector<PCB> a;
scanf("%d",&n);
while(i<n){
scanf("%s %d %d",p.name,&p.yxji,&p.ytime);
p.flag=1;
m+=p.ytime;
a.push_back(p);
i++;
}
for(j=0;j<m;j++){
b=judge(a);
int k=0;
if(b!=-1)
a[b].flag=2;
while(k<n){
if(a[k].flag==2){
a[k].yxji--;
a[k].ytime--;
if(a[k].ytime!=0)
a[k].flag=1;
else
a[k].flag=0;
printf("%s ",a[k].name);
}
k++;
}
}
}