news 2026/5/11 9:28:57

华为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/5/4 9:22:46

新手必看:JavaScript堆内存问题入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式学习工具&#xff0c;通过简单的示例和逐步引导&#xff0c;帮助初学者理解JavaScript堆内存分配失败的常见原因&#xff08;如内存泄漏、大对象分配等&#xff09;…

作者头像 李华
网站建设 2026/5/10 1:05:53

Neo4j图数据库学习(二)——SpringBoot整合Neo4j

一. 前言 本文介绍如何通过SpringBoot整合Neo4j的方式&#xff0c;对图数据库进行简单的操作。 Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识&#xff0c;有兴趣可以看看作者上一篇的文章&#xff1a;Neo4j图数据库学习(一)——初识CQL 二. 前置准备 新建SpringBo…

作者头像 李华
网站建设 2026/4/30 12:57:56

nginx 代理 redis

kubernetes 发布的redis服务端口为 31250 通过命令查询 [miniecs-88500735 /]$ minikube service redis --url http://192.168.49.2:31250[rootecs-88500735 /]# vi /etc/nginx/nginx.conf配置nginx.conf stream {upstream redis {server 192.168.49.2:31250;}server {listen 6…

作者头像 李华
网站建设 2026/4/30 10:14:00

背调软件如何重塑企业人才风控的底层逻辑

在信息高度不对称的招聘市场中&#xff0c;一份精心修饰的简历可能隐藏着企业难以承受的风险。近年来&#xff0c;超过60%的企业在招聘中层以上岗位时遭遇过履历信息失实的情况&#xff0c;其中近三分之一因此遭受了直接经济损失。当传统的人工背调在效率与深度之间陷入两难时&…

作者头像 李华
网站建设 2026/5/9 11:24:43

金运环球:金价静待非农定调,晚盘警惕数据引爆波动

【市场晚间简述】大宗商品指数年度再平衡的被动抛压持续影响市场&#xff0c;但金银价格在关键技术位获得买盘支撑后呈现震荡格局。地缘政治风险与美联储降息预期共同构成中长期支撑&#xff0c;限制了价格下行空间。市场焦点已转向晚间将公布的美国非农就业数据&#xff0c;该…

作者头像 李华