题目:
输入5组优先级任务。如下图所示
输入代表的意义是:
任务ID,优先级值(值越大,优先级越高),开始时间,持续时间。共5组。
输出代表的意思:
任务ID,执行持续时间,即整个任务执行的顺序。
思路:在做这类题目时,在时间轴上先画出优先级高的时间线,再画优先级低的时间线,当优先级低的时间线被优先级高的时间线挡住的时候,依次往后延续,直到占满它的时间需求。
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
struct task
{
int ID;
int priority;
int start;
int time;
};
bool compare(const task& task1, const task& task2)
{
return task1.priority>task2.priority;
}
int main()
{
vector<task> vec(5);
int coord[300] = { 0 };
int a, b, c, d;
for (int i = 0; i < 4; ++i)
{
scanf_s("[%d.%d.%d.%d]|", &a, &b, &c, &d);
vec[i].ID = a;
vec[i].priority = b;
vec[i].start = c;
vec[i].time = d;
}
scanf_s("[%d.%d.%d.%d]", &a, &b, &c, &d);
vec[4].ID = a;
vec[4].priority = b;
vec[4].start = c;
vec[4].time = d;
sort(vec.begin(), vec.end(), compare);
for (int i = 0; i < 5; ++i)
{
int begintime = vec[i].start;
int spend = 0;
for (int j = begintime;; ++j)
{
if (coord[j] == 0){
coord[j] = vec[i].ID;
spend++;
if (spend == vec[i].time) break;
}
}
}
int pre = -1;
for (int i = 0;; ++i)
{
if (i == 199)
{
printf("%d.%d", coord[i], i - pre);
break;
}
if (coord[i] == coord[i + 1])
{
}
else
{
printf("%d.%d|", coord[i], i - pre);
pre = i;
}
}
return 0;
}