印表機順序列印問題(一臺印表機有若干個任務,但是印表機每次只能列印一個任務,每個任務是有優先順序的,從1到9)
阿新 • • 發佈:2019-02-16
一臺印表機有若干個任務,但是印表機每次只能列印一個任務,每個任務是有優先順序的,從1到9。列印的時候從序列的第一個開始,如果第一個的優先順序不是最大的,則將其出隊,並加入隊尾。若其優先順序是最大的,則直接列印該任務。設計演算法實現如下功能:輸入:(1)第一行:輸入測試案例的個數,第二行:第一個數字是列印任務個數,第二個資料是目標任務在當前任務序列的位置
輸出:
(2)目前任務列印完成需要的時間(假設列印一個任務需要1個單位時間,轉移、判斷任務不需要時間)(3)所有任務的列印順序
例如:
1(只有一個測試用例)
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; }