算法面试题3:小猫钓鱼

问题描述:
小哼和小哈在玩一个扑克游戏——小猫钓鱼。游戏规则:将一副扑克牌平均分成两份,每人拿一分。小哼先拿出手中第一张扑克牌放在桌上,然后小哈也拿出手中第一张扑克牌,并放在小哼刚才打出的扑克牌的上面,两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,可将两张相同的牌及其中间所夹的牌全部拿走,并依次放到自己手中牌的末尾。当任意一人手中当牌出完时,游戏结束,对方获胜。

算法问题分析
1、这个游戏一共有两种操作:出牌和赢牌。 出牌即数据结构“队列”的出队,赢牌即数据结构“队列”入队。

2、桌面相当于一个栈,出牌即入栈,赢牌即出栈。

3、通过枚举了解桌面有哪些牌,并找出与手中的牌相同的牌。
问题解题思路
1、定义两个队列q1、q2表示小哼、小哈手中的牌。

2、定义一个栈s表示桌面的牌

3、定义数组book记录桌面上已经出现的牌面

4、游戏开始时q1的队首出队,判断当前时是输牌还是赢牌

 4.1如果是输牌,则入栈

 4.2如果是赢牌,则q1的队首到队尾,再将赢得的牌依次入队

5、q2 的队首出队,操作同4

6、第4、5步重复进行直至任意人手中没有牌

7、输出赢的人手中的牌,输出此时桌面上的牌
代码示例

#include <stdio.h>  

struct queue{  
    int  data[1000];  
    int head;  
    int hail;  
};  

struct stack{  
    int data[10];  
    int top;  
};  

int main(int argc, const char * argv[]) {  
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值