2026/2/11 0:35:23
网站建设
项目流程
自适应网站建设哪家便宜,蓝色商务网站模板,遨翔网站建设,如何建立公司采购订单 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录#xff5c;机考题库 算法考点详解
题目描述
在一个采购系统中#xff0c;采购申请(PR)需要经过审批后才能生成采购订单(P…采购订单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 10001 商品价格 2001 商品数量 10002 商品编号 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待审批忽略。题解思路使用模拟进行处理:循环处理输入的PR两种策略处理审批通过不同单价产品单价 100的PR: 直接生成一条最终PO记录。单价 100的PR可以使用一个中间数组累计对应商品总数目处理1中暂存数组中每个单价低于100的商品为它们生成PO如果该商品累计总数目大于等于100折扣之后价格为ceil(price * 0.9)向上取整添加一条新的PO记录。对于1 2 得到的最终PO记录进行自定义排序.排序规则为商品ID升序升序排列相同商品按照数量降序排列按顺序和题目要求规则输出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; }