【华为笔试】抢占式任务调度

/****************************************************************************

问题描述:

//抢占式任务调度
//输入: 第一行 :n任务数
//接下来n行是任务信息 时间单位为 秒
//任务号 优先级 开始时间 运行时间
//输出:前200s 任务调度顺序

****************************************************************************/

#include "iostream"

#include <vector>
#include "algorithm"
#include "string"
using namespace  std;
//任务信息结构体
typedef struct{
int id;
int priority;
int startTime;
    int runTime;
} Work;
//任务按照优先级降序排列
bool Less(const Work w1, const Work w2)
{
return w1.priority<w2.priority;
}
//正在运行任务信息
typedef  struct{
int id;
int times;//已经运行的时间
} Working; 
int  main()
{
vector<Work> works(20); //最大任务数为20 
int n;
cin >> n;//实际任务数
for (int ii = 0; ii<n; ii++)
{
cin >> works[ii].id >> works[ii].priority >> works[ii].startTime >> works[ii].runTime;
}
sort(works.begin(), works.begin() + n, Less);
vector< Working>  workqueue;


for (int ii = 0; ii < n; ii++)
{
cout<< works[ii].id << works[ii].priority << works[ii].startTime << works[ii].runTime<<endl;
}
Working w;
workqueue.push_back(w);
//以分钟为刻度进行考虑
for (int ii = 0; ii<200; ii++)
{
for (int jj = 0; jj < n; jj++)
{
if (works[jj].startTime <= ii)
{
if (workqueue[workqueue.size() - 1].id == works[jj].id)
{
workqueue[workqueue.size() - 1].times++;
--works[jj].runTime;
if (works[jj].runTime == 0)
{
works.erase(works.begin()+jj);
n--;
}
}

else
{
w.id = works[jj].id;
w.times = 0;
workqueue.push_back(w);
}
break;
}
}
}
int size = workqueue.size();
for (int ii = 1; ii < size; ++ii)
{
cout <<"[ "<< workqueue[ii].id << " , " << workqueue[ii].times << " ]" << endl;
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值