AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0072. 魔法金币收银台设计

中等通过率 62% · 提交 55 · 通过 34
模拟贪心哈希表

在小慕负责的魔法商店里,有一套神奇的金币收银系统,专门用来处理顾客的付款和找零。收银台由小慕精心设计,能够自动完成金币的交易与找零。每种面额的金币都蕴含着不同的魔法力量,而小慕需要设计一个魔法金币收银台系统来管理整个交易流程。 给定两个输入参数: 1. :一个列表,表示商店收银台初始拥有的金币数量。金币的面额为 `1卢比`、`5卢比`、`10卢比`、`50卢比` 和 `100卢比`,每种金币面额有对应的数量。 2. payments:一个列表,包含若干次交易。每次交易由两个部分组成:商品价格 `price` 和顾客支付的每种面额金币的数量 `paidGolds`。 规则: - 如果顾客支付的金币比商品价格少,交易失败,商店不会接受顾客的金币。返回 `[-1]`。 - 如果顾客支付的金币与商品价格正好相等,商店接受顾客的付款,并更新收银台的金币数量。 - 如果顾客支付的金币超过商品价格,商店需要找零: - 如果找不开零,交易失败,商店不会接受顾客的金币。返回 `[-2]`。 - 如果能够找零,商店按照来找零,并更新收银台的金币数量。 - 请注意,找零时,商店应先接受顾客的金币后,

提示:带虚线的词点一下有通俗解释。

输入描述

1. 第一行:一个整数 `Q`,表示交易次数。 2. 对于每次交易: - 第一行:一个字符串,表示命令 `"MagicCashRegister"`,表示初始化收银台系统。 - 第二行:一个包含商店收银台初始金币数量的列表,按顺序包含 `1卢比`、`5卢比`、`10卢比`、`50卢比` 和 `100卢比` 面额的金币数量。 - 接下来 `Q` 行:每行包含两个部分: - `price`:商品价格,整数。 - `paidGolds`:顾客支付的金币数量,以一个列表形式给出,按顺序包含 `1卢比`、`5卢比`、`10卢比`、`50卢比` 和 `100卢比` 面额的金币数量。

输出描述

- 对于每次交易: - 如果交易成功,输出一个长度为5的数组,表示找零的金币数量,按顺序包含 `1卢比`、`5卢比`、`10卢比`、`50卢比` 和 `100卢比` 面额的金币数量。 - 如果交易失败: - 输出 `[-1]`:表示顾客支付的金币少于商品价格。 - 输出 `[-2]`:表示商店无法找零。 - 在初始化系统时,返回 `"null"`。

示例

示例 1

输入

6
MagicCashRegister
0 0 0 0 0
processTransaction
20
2 1 0 0 1
processTransaction
10
2 1 0 0 0
processTransaction
15
0 1 2 0 0
processTransaction
40
10 0 1 1 0
processTransaction
68
2 2 2 2 0

输出

null
-2
-1
0 0 1 0 0
5 1 2 0 0
4 0 1 1 0

说明:1. **初始化收银台系统**:商店初始化了收银台的金币数量为 `[0, 0, 0, 0, 0]`,对应输出 `null`。 2. **第一次交易**:商品价格 `20`,顾客支付 `107`,需要找零 `87`,但商店无法找零,输出 `[-2]`。 3. **第二次交易**:商品价格 `10`,顾客支付 `7`,少于价格,输出 `[-1]`。 4. **第三次交易**:商品价格 `15`,顾客支付 `25`,找零 `10`,找零成功,输出 `[0, 0, 1, 0, 0]`。 5. **第四次交易**:商品价格 `40`,顾客支付 `70`,找零 `30`,找零成功,输出 `[5, 1, 2, 0, 0]`。 6. **第五次交易**:商品价格 `68`,顾客支付 `132`,找零 `64`,找零成功,输出 `[4, 0, 1, 1, 0]`。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
魔法金币收银台交易流程示例 顾客支付 商品价格: 15 卢比 支付: 25 卢比 (1枚10卢比 + 3枚5卢比) 支付 商店收银台 初始金币: 0 接受支付后: 25 卢比 需找零: 10 卢比 找零 找零 10 卢比 (1枚10) 找零规则:优先使用大面额金币 • 支付 < 价格 → 失败 [-1] • 支付 = 价格 → 直接收下,无需找零 • 支付 > 价格 → 先收下全部金币,再用所有金币(含刚收的)找零 • 找零时优先用100→50→10→5→1,尽量用最少金币数 • 找不开 → 失败 [-2]
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法金币收银台设计」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。