优先级调度:优先级高的任务先执行。


题目:spa

输入5组优先级任务。以下图所示code


输入表明的意义是:blog

 任务ID,优先级值(值越大,优先级越高),开始时间,持续时间。共5组。it

输出表明的意思:io

 任务ID,执行持续时间,即整个任务执行的顺序。class


思路:在作这类题目时,在时间轴上先画出优先级高的时间线,再画优先级低的时间线,当优先级低的时间线被优先级高的时间线挡住的时候,依次日后延续,直到占满它的时间需求。im

#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;
}