打印机顺序打印问题(一台打印机有若干个任务,但是打印机每次只能打印一个任务,每个任务是有优先级的,从1到9)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Aoulun/article/details/79960147

一台打印机有若干个任务,但是打印机每次只能打印一个任务,每个任务是有优先级的,从1到9。打印的时候从序列的第一个开始,如果第一个的 优先级不是最大的,则将其出队,并加入队尾。若其优先级是最大的,则直接打印该任务。设计算法实现如下功能:
输入:
(1)第一行:输入测试案例的个数,第二行:第一个数字是打印任务个数,第二个数据是目标任务在当前任务序列的位置

输出:

(2)目前任务打印完成需要的时间(假设打印一个任务需要1个单位时间,转移、判断任务不需要时间)

(3)所有任务的打印顺序

例如:


1(只有一个测试用例)

2 1(一共两个任务,目标任务的位置是1--任务是从0开始的)

2 3(序列)

输出:

2 1 0

代码:

#include <stdlib.h>
#include <stdio.h>
#include <queue>

using namespace std;

struct point {
	int id;
	int pry;
};

int main()
{
	int casenum = 0;
	int n = 0;
	int m = 0;
	int j;
	int i;
	scanf_s("%d", &casenum);
	while (casenum--)
	{
		int pty[115];
		point pt[115];
		int lst[115];
		int lstcnt = 0;
		int time = 1;
		queue<point>Q;
		scanf_s("%d%d", &n, &m);
		for (i = 0; i<n; i++)
		{
			scanf_s("%d", &pty[i]);
			pt[i].pry = pty[i];
			pt[i].id = i;
			Q.push(pt[i]);
		}
		// 上面是没有问题的
		int T = n;
		while (T != 0)
		{
			int count = 0;
			point crt = Q.front();
			Q.pop();
			int ij;
			for (ij = 0; ij < n; ++ij)
			{
				if (crt.pry < pty[ij])
				{
					count++;
					break;
				}
			}
			if (count == 0)
			{
				lst[lstcnt++] = crt.id;
				pty[crt.id] = 0;
				T--;
			}
			else
				Q.push(crt);
		}
		for (j = 0; j < n; j++)
		{
			printf("%d ", lst[j]);
		}
		printf("\n");

		for (j = 0; j < n; j++)
		{
			if (lst[j] != m)
			{
				time++;
			}
			else
				break;
		}
		printf("%d\n", time);
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Aoulun/article/details/79960147
今日推荐