A和B两个同学玩简单的纸牌游戏,每人手里有n张牌,两人轮流出牌并依次排列在桌面上,每次出掉手里的第1张牌,出牌后如果发现桌面上有跟刚才打出的牌的数字相同的牌,则把从相同的那张牌开始的全部牌按次序放在自己手里的牌的末尾。当一个人手中的牌先出完时,游戏结束,对方获胜。
#include<stdio.h>
#include<string.h>
typedef struct queue{//队列
int data[10000];
int head;
int tail;
};
typedef struct stack{//栈
int data[10];
int top;
};
int main(void)
{
queue q1,q2;//队列
stack s;//栈
int flag=0,t,book[14];
q1.head=1;q1.tail=1;
q2.head=1;q2.tail=1;
s.top=0;
for(int i=1;i<=13;i++)//刚开始没有牌
{
book[i]=0;
}
for(int i=1;i<=6;i++)//读入p1的牌入队
{
scanf("%d",&q1.data[q1.tail++]);
}
for(int i=1;i<=6;i++)//读入p2的牌入队
{
scanf("%d",&q2.data[q2.tail++]);
}
while(q1.head<q1.tail && q2.head<q2.tail)//当有人没有牌的时候游戏结束
{
t=q1.data[q1.head];//这张牌
if(book[t]==0)//桌面是否有
{
q1.head++;
s.top++;
s.data[s.top]=t;//入栈
book[t]=1;//记录牌
}
else
{
q1.head++;
q1.data[q1.tail]=t;
q1.tail++;
while(s.data[s.top]!=t)
{
book[s.data[s.top]]=0;//清除桌面牌
q1.data[q1.tail]=s.data[s.top];//出栈
q1.tail++;
s.top--;
}
}
t=q2.data[q2.head]; //同理对于p2
if(book[t]==0)
{
q2.head++;
s.top++;
s.data[s.top]=t;
book[t]=1;
}
else
{
q2.head++;
q2.data[q2.tail]=t;
q2.tail++;
while(s.data[s.top]!=t)
{
book[s.data[s.top]]=0;
q2.data[q2.tail]=s.data[s.top];
q2.tail++;
s.top--;
}
}
}
if(q2.head==q2.tail)//判断是否p1win
{
printf("p1:win");
}
else printf("p2:win");
return 0;
}