2-3 用栈和队列来实现纸牌游戏
游戏规则:将一副扑克牌平均分成两份,每人一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的一张扑克牌,并放在小哼刚打出的扑克牌上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间的所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。
桌面的牌用栈实现,两人手中的牌用队列实现
C实现
#include<stdio.h>
struct stack
{
int data[100];
int top;
};
struct queue
{
int data[100];
int head;
int tail;
};
int main()
{
int i,n,t;
struct stack s;
struct queue q1,q2;
int book[10]={
0};
//牌都是1-9,用book数组来标记桌面上有哪些牌,就不用每次比较出的牌与桌面是否相同
s.top=0;
q1.head=1;
q1.tail=1;
q2.head=1;
q2.tail=1;
scanf("%d",&n);
//分别向两人手中输入牌
for(i=1;i<=n;i++)
{
scanf("%d",&q1.data[q1.tail++]);
}
for(i=1;i<=n;i++)
{
scanf("%d",&q2.data[q2.tail++]) ;
}
//出牌
while(q1.head < q1.tail && q2.head < q2.tail)
{
//小哼出牌
t=q1.data[q1.head];
if(book[t]==0)
{
s.top++