【アルゴリズム】印刷順序——2017華為招聘機試験問題


プリンタは、印刷キューに基づいて印刷タスクを実行します.印刷ジョブは9つの優先度に分けられ、それぞれ数字1~9で表され、数字が大きいほど優先度が高くなる.プリンタは、最初のタスクAをキューヘッダから取り出すたびに、キューの残りのタスクにAよりも優先度の高いタスクがあるかどうかを確認し、Aより優先度の高いタスクがある場合は、タスクAをキューの末尾に配置します.そうしないと、タスクAの印刷を実行します.入力した印刷キューに基づいて、実際の印刷順序を出力するプログラムを作成してください.
関数のプロトタイプ:
void printOrder(const int input[], int len, int output[])
パラメータinputは印刷キューを表し、1~9(優先度)からなる配列であり、配列インデックス0はヘッダを表す.C/C++パラメータlenがinput配列長を表す場合、パラメータが合法的に有効であると仮定する.
分析:一見、ソートの問題であり、印刷するたびに最高優先度のタスクであり、変数でいくつかの印刷を識別すれば、問題を解決することができます.
 
#include "stdafx.h"
#include 

void printOrder(const int input[], int len, int output[])
{
	if(len <= 0)
	{
		printf("Input Error!
"); return; } // int iPrintFlag = 0; // list std::list TempList; for(int i = 0; i < len; ++i) { TempList.push_back(input[i]); } do { bool bFlag = false; int iHead = TempList.front(); std::list::iterator it; for(it = TempList.begin(); it != TempList.end(); ++it) { if(iHead < *it) { bFlag = true; break; } } if(bFlag) // { // TempList.pop_front(); TempList.push_back(iHead); } else { // , TempList.pop_front(); for(int i = 0; i < len; ++i) { if(input[i] == iHead) { output[i] = iPrintFlag; iPrintFlag++; } } } }while(TempList.size() > 0); } int _tmain(int argc, _TCHAR* argv[]) { int input[3] = {9,3,5}; int output[3] = {0}; printOrder(input, 3, output); for(int i = 0; i < 3; ++i) { printf("%d,", output[i]); } system("pause"); return 0; }