news 2026/2/28 6:19:42

华为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/2/21 15:24:27

最新面向自然科学领域机器学习与深度学习技术

随着观测技术、数值模拟与计算基础设施的迅猛发展&#xff0c;地球系统科学、生态学、环境科学等自然科学领域正迈入“大数据智能模型”驱动的新阶段。传统的统计建模方法虽具可解释性&#xff0c;却难以应对高维、非线性、多源异构的复杂自然系统&#xff1b;而以机器学习和深…

作者头像 李华
网站建设 2026/2/25 17:03:30

Nacos Namespaces未授权访问漏洞的防御策略

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 详细说明如何防御Nacos Namespaces未授权访问漏洞。包括修改Nacos配置以限制未授权访问、设置合理的权限控制策略、启用认证机制&#xff08;如JWT或OAuth2&#xff09;&#xff0…

作者头像 李华
网站建设 2026/2/25 11:08:48

成本优化:用Llama Factory实现高效GPU资源利用

成本优化&#xff1a;用Llama Factory实现高效GPU资源利用 对于初创公司来说&#xff0c;GPU资源往往是AI模型开发过程中最昂贵的投入之一。如何在有限的预算下最大化GPU利用率&#xff0c;实现按需使用和自动伸缩&#xff0c;是每个技术团队都需要面对的挑战。本文将介绍如何利…

作者头像 李华
网站建设 2026/2/28 4:02:23

Nginx location 和 proxy_pass 配置详解

概述 Nginx 配置中 location 和 proxy_pass 指令的不同组合方式及其对请求转发路径的影响。 配置效果 1. location 和 proxy_pass 都带斜杠 / location /api/ {proxy_pass http://127.0.0.1:8080/; }访问地址&#xff1a;www.hw.com/api/upload转发地址&#xff1a;http://127.…

作者头像 李华
网站建设 2026/2/20 12:38:23

Nginx 常用安全头

Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头&#xff0c;可以抵御常见的安全威胁&#xff08;如 XSS、点击劫持、MIME 类型嗅探等&#xff09;&#xff0c;增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…

作者头像 李华
网站建设 2026/2/20 20:32:37

比手动快10倍!自动化处理STEP7许可证问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个自动化许可证管理工具&#xff0c;专门针对STEP7 BASIC。功能&#xff1a;1. 自动备份许可证&#xff1b;2. 许可证状态监控&#xff1b;3. 异常自动恢复&#xff1b;4. 多…

作者头像 李华