news 2026/5/5 17:54:25

华为OD机试真题双机位C卷 【采购订单】C语言实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试真题双机位C卷 【采购订单】C语言实现

采购订单

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

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

题目描述

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

具体规则如下:

如果PR状态为"审批通过",则将其商品加入到PO中。如果PR的状态为"审批拒绝"或"待审批",则忽略改PR。

对于单价高于100元的商品,每个商品单独生成一条PO记录。对于单价低于100元的商品,将相同商品的数量合并到一条PO记录中。

如果商品单价<100且商品数量>=100,则单价打9折。

输入描述

第一行包含整数N,表示PR的数量。

接下来N行,每行包含五个用空格分割的整数,按顺序表示:商品ID,数量,单价,PR状态(0表示审批通过,1表示审批拒绝,2表示待审批)

输出描述

输出若干行,每行表示一条PO记录,按以下格式输出:

对于单价高于100元的商品:商品ID 数量 单价

对于单价低于或等于100元的商品: 商品ID 总数量 打折后的单价(向上取整)

输出的PO记录按商品ID升序升序排列,相同商品按照数量降序排列

补充

  • 2 <= n <= 1000
  • 1 <= 商品价格 <= 200
  • 1 <= 商品数量 <= 1000
  • 2 <= 商品编号 <= 1000

用例1

输入

2 1 200 90 0 2 30 101 0

输出

1 200 81 2 30 101

说明

商品1的原始单价为90,审批通过,生成一条PO,满足打折条件,打折后单价为81。

商品2的单价为101,审批通过,生成一条PO

用例2

输入

3 1 10 90 0 1 5 90 0 2 8 120 0

输出

1 15 90 2 8 120

说明

PR1和PR2均为商品1,单价90,审批通过,单价低于100元,合并数量为150.

PR3为商品2,单价120元,审批通过,单价高于100元,单独生成一条PO记录。

用例3

输入

4 1 5 80 0 2 3 120 0 3 2 90 1 4 10 150 2

输出

1 5 80 2 3 120

说明

PR1:商品1,单价80元,审批通过,单价低于100元,合并到PO中。PR2:商品2,单价120元,审批通过,单价高于100元,单独生成一条PO记录。PR3:审批拒绝, 忽略。PR4待审批忽略。

题解

思路

使用模拟进行处理:

  1. 循环处理输入的PR,两种策略处理审批通过不同单价产品:
    • 单价> 100的PR: 直接生成一条最终PO记录。
    • 单价 <= 100的PR:可以使用一个中间数组累计对应商品总数目
  2. 处理1中暂存数组中每个单价低于100的商品,为它们生成PO,如果该商品累计总数目大于等于100,折扣之后价格为ceil(price * 0.9)向上取整,添加一条新的PO记录。
  3. 对于1 2 得到的最终PO记录,进行自定义排序.排序规则为商品ID升序升序排列,相同商品按照数量降序排列
  4. 按顺序和题目要求规则输出PO记录。

code

#include <stdio.h> #include <math.h> #include <stdlib.h> #define MAXN 1000 typedef struct { int id; int num; int price; int discountPrice; } Product; typedef struct { int id; int num; int price; } LowProduct; /* 排序规则:id 升序,num 降序 */ int cmp(const void *a, const void *b) { Product *x = (Product *)a; Product *y = (Product *)b; if (x->id != y->id) return x->id - y->id; return y->num - x->num; } int main() { int n; scanf("%d", &n); Product res[MAXN]; int resCnt = 0; LowProduct low[MAXN]; int lowCnt = 0; for (int i = 0; i < n; i++) { int id, num, price, status; scanf("%d %d %d %d", &id, &num, &price, &status); if (status != 0) continue; if (price > 100) { // 高价商品,直接入结果 res[resCnt].id = id; res[resCnt].num = num; res[resCnt].price = price; res[resCnt].discountPrice = price; resCnt++; } else { // 低价商品,按 id 合并 int found = 0; for (int j = 0; j < lowCnt; j++) { if (low[j].id == id) { low[j].num += num; found = 1; break; } } if (!found) { low[lowCnt].id = id; low[lowCnt].num = num; low[lowCnt].price = price; lowCnt++; } } } // 处理低价商品合并结果 for (int i = 0; i < lowCnt; i++) { res[resCnt].id = low[i].id; res[resCnt].num = low[i].num; res[resCnt].price = low[i].price; if (low[i].num >= 100) { res[resCnt].discountPrice = (int)ceil(low[i].price * 0.9); } else { res[resCnt].discountPrice = low[i].price; } resCnt++; } // 排序 qsort(res, resCnt, sizeof(Product), cmp); // 输出 for (int i = 0; i < resCnt; i++) { printf("%d %d %d\n", res[i].id, res[i].num, res[i].discountPrice); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 14:16:56

2026必备!8个AI论文平台,助你轻松搞定本科毕业论文!

2026必备&#xff01;8个AI论文平台&#xff0c;助你轻松搞定本科毕业论文&#xff01; AI 工具的崛起&#xff0c;让论文写作不再难 在当前这个信息爆炸的时代&#xff0c;学术研究和论文写作已成为本科生必须面对的重要任务。无论是课程作业还是毕业论文&#xff0c;都对学生…

作者头像 李华
网站建设 2026/5/1 17:48:11

突破AI原生应用领域可控性的瓶颈

突破AI原生应用领域可控性的瓶颈:从"黑箱魔法"到"透明工坊" 关键词:AI原生应用、可控性、可解释性、意图对齐、动态反馈 摘要:当AI从"辅助工具"进化为"原生构建者",我们不再满足于它"偶尔给出惊喜",而是需要它"稳…

作者头像 李华
网站建设 2026/5/1 16:36:08

渗透测试该如何系统学习?一份从小白到实战的学习路径规划

渗透测试该如何系统学习&#xff1f;一份从小白到实战的学习路径规划 在网络安全持续升温的今天&#xff0c;越来越多的人开始关注“渗透测试”这一硬核技能。但渗透测试门槛不低&#xff0c;很多新手一上来就被术语、工具和庞杂的学习路径劝退。 那么&#xff0c;渗透测试到…

作者头像 李华
网站建设 2026/5/3 6:52:20

python基于django的基于微信小程序的校园跑腿系统 校园快递代取系统97h4937r

目录 基于Django与微信小程序的校园跑腿系统摘要 关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于Django与微信小程序的校园跑腿系统摘要 校园跑腿系统结合Django后端框架与微…

作者头像 李华