news 2026/6/15 16:48:29

华为OD机试真题双机位C卷【打印机队列】 C语言实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试真题双机位C卷【打印机队列】 C语言实现

打印机队列

2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型

华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解

其它语言题解链接

华为OD机试双机位C卷 - 打印机队列 (Python & C++ & JAVA & JS & GO)

题目描述

有5台打印机打印文件,每台打印机有自己的待打印队列。

因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的代先级,其中数字越大优先级越高

打印机会从自己的待打印队列中选择优先级最高的文件来打印。

如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。

现在请你来模拟这5台打印机的打印过程。

输入描述

每个输入包含1个测试用例,

每个测试用例第一行给出发生事件的数量N(0 < N < 1000)。

接下来有 N 行,分别表示发生的事件。共有如下两种事件:

  • IN P NUM,表示有一个拥有优先级 NUM 的文件放到了打印机 P 的待打印队列中。(0< P <= 5, 0 < NUM <= 10);
  • OUT P,表示打印机 P 进行了一次文件打印,同时该文件从待打印队列中取出。(0 < P <= 5)。

输出描述

  • 对于每个测试用例,每次”OUT P”事件,请在一行中输出文件的编号
  • 如果此时没有文件可以打印,请输出”NULL“。
  • 文件的编号定义为”IN P NUM”事件发生第 x 次,此处待打印文件的编号为x。编号从1开始。

用例1

输入

7 IN 1 1 IN 1 2 IN 1 3 IN 2 1 OUT 1 OUT 2 OUT 2

输出

3 4 NULL

用例2

输入

5 IN 1 1 IN 1 3 IN 1 1 IN 1 3 OUT 1

输出

2

题解

思路

  1. C语言本身不提供优先队列数据结构,解决这道特点(打印机数量固定、 优先级范围固定)决定可以采用自定义优先队列或者下面的分打印机分优先级链表方式解决。
  2. 自定义链表结构体,为每个打印机每个优先级提供一个链表结构。
  3. 接下来就是模拟:
    • 对于IN P NUM操作,找到对应索引printer[P-1][NUM]的链表,使用尾插法。
    • 对于OUT P操作,找到对应printerp[P-1]打印机,按照优先级(10 - 1)顺序循环判断链表是否为空,一旦指定链表不为空,打印文件编号,并删除头节点。如果所有优先级链表都为空输出NULL.
  4. 通过以上步骤即可解决此题。

code

#include<stdio.h>#include<stdlib.h>// 链表节点typedefstructNode{intid;structNode*next;}Node;typedefstructQueue{Node*head,*tail;}Queue;Queue printer[5][11];// 5 台打印机,优先级 1~10intfileId=1;// 插入文件,保存到对应优先级链表中voidenqueue(intp,intpriority){Node*node=(Node*)malloc(sizeof(Node));node->id=fileId++;node->next=NULL;Queue*q=&printer[p-1][priority];if(!q->head){q->head=q->tail=node;}else{q->tail->next=node;q->tail=node;}}// 打印文件voiddequeue(intp){for(intprio=10;prio>=1;prio--){Queue*q=&printer[p-1][prio];if(q->head){Node*node=q->head;printf("%d\n",node->id);q->head=node->next;if(!q->head)q->tail=NULL;free(node);return;}}printf("NULL\n");}intmain(){intN;scanf("%d\n",&N);charcmd[20];intP,NUM;for(inti=0;i<N;i++){fgets(cmd,sizeof(cmd),stdin);if(cmd[0]=='I'){// INsscanf(cmd,"IN %d %d",&P,&NUM);enqueue(P,NUM);}else{// OUTsscanf(cmd,"OUT %d",&P);dequeue(P);}}// 释放剩余节点for(intp=0;p<5;p++)for(intprio=1;prio<=10;prio++){Node*cur=printer[p][prio].head;while(cur){Node*tmp=cur;cur=cur->next;free(tmp);}}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:24:39

基于 YOLOv8 的人体与行人检测智能识别实战 [目标检测完整源码]

基于 YOLOv8 的人体与行人检测智能识别实战 [目标检测完整源码] 引言&#xff1a;为什么“行人检测”仍然是工程中的关键基础能力&#xff1f; 在安防监控、智慧城市、公共空间管理等应用中&#xff0c;几乎所有高层视觉任务——如人数统计、行为分析、异常检测——都建立在一…

作者头像 李华
网站建设 2026/6/15 12:33:27

用Docker快速验证创业idea:1小时搭建MVP环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个创业MVP技术栈的Docker环境&#xff1a;1.Vue3前端 2.NestJS后端 3.PostgreSQL数据库 4.Redis缓存 要求&#xff1a;1.一键启动完整环境 2.包含示例API接口 3.预置测试数据…

作者头像 李华
网站建设 2026/6/15 12:33:23

AI助力漏洞复现:Vulhub自动化搭建指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于Vulhub的自动化漏洞复现系统&#xff0c;要求&#xff1a;1.支持通过自然语言描述漏洞类型自动匹配Vulhub镜像 2.自动生成docker-compose配置文件 3.提供漏洞验证的测…

作者头像 李华
网站建设 2026/6/15 12:30:58

Thinkphp-Laravelvue药品招标采购系统的设计与实现

目录摘要关键技术项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理摘要 药品招标采购系统基于ThinkPHP、Laravel和Vue.js框架设计&#xff0c;旨在实现药品采购流程的数字化与智能化管理。系统采用前后端分离架构&#xff0c;后端基于ThinkPHP和La…

作者头像 李华
网站建设 2026/6/10 16:50:06

Zigbee 3.0标准在智能家居中的组网应用详解

Zigbee 3.0&#xff1a;如何用一张“自愈网”点亮你的全屋智能&#xff1f;你有没有过这样的经历&#xff1f;买了一个支持智能家居的灯泡&#xff0c;结果发现它和家里的传感器根本连不上&#xff1b;或者半夜起夜&#xff0c;等了两秒灯光才亮——这已经不算“智能”&#xf…

作者头像 李华
网站建设 2026/6/15 12:31:07

新手也能玩转TTS:图形化界面+API双模式,快速接入业务系统

新手也能玩转TTS&#xff1a;图形化界面API双模式&#xff0c;快速接入业务系统 &#x1f4cc; 为什么需要中文多情感语音合成&#xff1f; 在智能客服、有声阅读、虚拟主播、教育辅助等场景中&#xff0c;自然流畅且富有情感的语音输出已成为提升用户体验的关键要素。传统的…

作者头像 李华