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

N0008. 0415-小猫钓鱼纸牌游戏

中等通过率 31% · 提交 74 · 通过 23
模拟队列哈希表

小慕正在设计一款名为“小猫钓鱼”的扑克牌游戏。扑克牌用数字1到13表示(分别对应A、2、3、…、J、Q、K),不考虑花色。游戏开始时,小慕和对手各获得n张牌,按给定顺序排成,这些牌背面朝上、正面朝下放置,队列的第一个元素是背面的第一张牌。 游戏规则如下: 1. 出牌与收牌 - 初始出牌时,小慕先出牌,打出的牌正面朝上放在桌面的最底部,然后对手出牌,正面朝上放在小慕的牌张上面,双方轮流出牌,直到触发收牌或者任意一方牌出完。 - 如果玩家出牌后触发了收牌,则把收到的一摞牌作为整体后,背面朝上、正面朝下放到现有牌的底部,然后当前收牌的玩家继续出牌。 2. 收牌规则 - 若当前打出的牌点数,与桌面上之前某张牌的点数相同,则触发收牌,。 - 若当前打出的牌是J(即点数11),并且此时桌面上已有至少一张牌(不含当前这张),则当前玩家触发收牌,收牌的范围是桌面上的所有牌。若桌面上原本没有牌,则J仅作为普通牌放到桌面上,不触发特殊效果。 3. 游戏结束条件 - 若某位玩家在自己回合开始时已经没有牌可出,则游戏立即结束,如果此时对方还有余牌,则对方获胜,如果对方也无牌,则平局。 - 若在模拟过程中,出牌总次数超过一个上限(10000次)仍未结束,则认为游戏进入死循环,判定为平局。

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

输入描述

甲的初始牌队列和乙的初始牌队列,甲乙初始手牌数量相等,均为整数n(1≤n≤100)。

输出描述

一方获胜时,输出获胜方手中背面朝上最上方的那张牌的数值。若平局,如果桌面无牌则输出0,否则输出当前桌面上正面朝上的最上方的那张牌的数值。

示例

示例 1

输入

2
1 2
10 12

输出

12

说明:- 甲的牌堆: [1,2] - 乙的牌堆: [10,12] - 出牌顺序: 甲出1,乙出10,甲出2,乙出12,甲无牌可出,乙无余牌,游戏结束,平局。 - 桌面牌堆为[1,10,2,12]。 - 平局,输出桌面牌堆正面朝上最上方牌的数值:12。

示例 2

输入

2
1 2
1 2

输出

1

说明:- 甲的牌堆: [1,2] - 乙的牌堆: [1,2] - 出牌顺序: 1. 甲出1,剩余[2],桌面: [1]。 2. 乙出1,剩余[2],匹配桌面的1,拿走[1,1],桌面: [],放回乙牌堆:乙牌堆变为[2,1,1]。 3. 乙出2,剩余[1,1],桌面: [2]。 4. 甲出2,剩余[],匹配桌面的2,拿走[2,2],桌面: [],放回甲牌堆:甲牌堆变为[2,2]。 5. 甲出2,剩余[2],桌面: [2]。 6. 乙出1,剩余[1],桌面: [2,1]。 7. 甲出2,剩余[],匹配桌面的2,拿走[2,1,2],桌面: [],放回甲牌堆:甲牌堆变为[2,1,2]。 8. 甲出2,剩余[1,2],桌面: [2]。 9. 乙出1,剩余[],桌面: [2,1]。 10. 甲出1,剩余[2],匹配桌面的1,拿走[1,1],桌面: [2],放回甲牌堆:甲牌堆变为[2,1,1]。 11. 甲出2,剩余[1,1],匹配桌面的2,拿走[2,2],桌面: [],放回甲牌堆:甲牌堆变为[1,1,2,2]。 12. 甲出1,剩余[1,2,2],桌面: [1]。 13. 乙无牌可出,甲还有余牌,甲获胜。 - 游戏结束,甲牌堆剩余[1,2,2],输出:1。

示例 3

输入

4
1 2 11 4
10 12 2 1

输出

12

说明:- 甲的牌堆: [1,2,11,4] - 乙的牌堆: [10,12,2,1] - 出牌顺序: 1. 甲出1,剩余[2,11,4],桌面: [1]。 2. 乙出10,剩余[12,2,1],桌面: [1,10]。 3. 甲出2,剩余[11,4],桌面: [1,10,2]。 4. 乙出12,剩余[2,1],桌面: [1,10,2,12]。 5. 甲出11,剩余[4],触发特效,拿走[1,10,2,12,11],桌面: [],放回甲牌堆:甲牌堆变为[4,1,10,2,12,11]。 6. 甲出4,剩余[1,10,2,12,11],桌面: [4]。 7. 乙出2,剩余[1],桌面: [4,2]。 8. 甲出1,剩余[10,2,12,11],桌面: [4,2,1]。 9. 乙出1,剩余[],匹配桌面的1,拿走[1,1],桌面: [4,2],放回乙牌堆:乙牌堆变为[1,1]。 10. 乙出1,剩余[1],桌面: [4,2,1]。 11. 甲出10,剩余[2,12,11],桌面: [4,2,1,10]。 12. 乙出1,剩余[],匹配桌面的1,拿走[1,10,1],桌面: [4,2],放回乙牌堆:乙牌堆变为[1,10,1]。 13. 乙出1,剩余[10,1],桌面: [4,2,1]。 14. 甲出2,剩余[12,11],匹配桌面的2,拿走[2,1,2],桌面: [4],放回甲牌堆:甲牌堆变为[12,11,2,1,2]。 15. 甲出12,剩余[11,2,1,2],桌面: [4,12]。 16. 乙出10,剩余[1],桌面: [4,12,10]。 17. 甲出11,剩余[2,1,2],触发J特效,拿走[4,12,10,11],桌面: [],放回甲牌堆:甲牌堆变为[2,1,2,4,12,10,11]。 18. 甲出2,剩余[1,2,4,12,10,11],桌面: [2]。 19. 乙出1,剩余[],桌面: [2,1]。 20. 甲出1,剩余[2,4,12,10,11],桌面: [2,1]。 21. 甲出2,剩余[4,12,10,11,1],匹配桌面的1,拿走[1,1],桌面: [2],放回甲牌堆:甲牌堆变为[2,4,12,10,11,1,1]。 22. 甲出4,剩余[12,10,11,1,1,2,2],匹配桌面的2,拿走[2,2],桌面: [],放回甲牌堆:甲牌堆变为[4,12,10,11,1,1,2,2]。 23. 乙无牌可出,甲还有余牌,甲获胜。 - 游戏结束,甲牌堆剩余[12,10,11,1,1,2,2],输出:12。

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

看不懂题目?点开图解
小猫钓鱼纸牌游戏流程示例 甲手牌队列 1 2 ... 乙手牌队列 10 12 桌面牌堆(正面朝上) 1 10 2 12 甲出牌 乙出牌 收牌范围(含两端) 1 10 2 12 若打出的牌与桌面某牌点数相同,则收走中间所有牌
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「0415-小猫钓鱼纸牌游戏」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。