【C语言 每日一题】SOJ 1003 Hit or Miss

题意

题目连接:http://soj.sysu.edu.cn/1003

有纸牌游戏 Hit or Miss,游戏流程为:有一套叠好的纸牌(52 张,4 组,值为 1 - 13,花色在本游戏不重要)。
1. 玩家从 1 开始计数;
2. 如果当前计数与最顶端的纸牌数值相同,则扔掉最顶端纸牌,否则将最顶端的纸牌放入这叠纸牌最底部;
3. 计数加一,当计数超过 13 时,回到 1 重新计数。重复第二步;

该游戏也支持多名玩家,最开始只给第一名玩家一叠纸牌(52张)。
1. 玩家从上次自己计数停止处开始计数,最开始为 1;
2. 当玩家接受到纸牌时塞入自己维护的纸牌的最底部。
3. 如果当前计数与自己维护的纸牌最顶端的纸牌数值不同,将最顶端的纸牌放入这叠纸牌最底部,并回到第一步。否则,如果该玩家是最后一名玩家,则扔掉该纸牌,如果不是最后一名玩家,则将该纸牌传递给下一位玩家。数值相同的情况下,游戏都从下一位玩家开始;
4. 当所有牌都被扔了时,游戏胜利。

根据输入的玩家数量以及一套乱序纸牌,判断游戏是否能够胜利。如果能够游戏胜利,则给出结束时,每位玩家或传递或扔掉的最后一张纸牌的数值。否则输出 unwinnable。

题解

题目没有涉及复杂的算法,只要模拟这个游戏就好了……为每个玩家维护一个纸牌队列,然后循环就行。至于游戏是否能够胜利这点,我们只能以循环的次数决定了,当循环次数过大时,游戏结束。(我在提交时设置的次数为 5000,能够 AC)。

代码

代码这块也很朴实。不过我没有用到标准库提供的队列,自己粗暴地实现了一个循环队列来模拟每个玩家维护的纸牌队列~

#include <stdio.h>
#include <string.h>

#define CARD_MAX 52
#define 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值