//小猫钓鱼
#include<stdio.h>
//模拟手中的牌,先进先出
struct queue
{
int data[100];
int head;
int tail;
} ;
//模拟桌面上的牌
struct stack
{
int data[10];
int top;
} ;
int main()
{
struct queue q1,q2;
struct stack s;
int book[10];//判断桌面上是否存在刚出的牌;
int i,t;
//初始化队列
q1.head=1;q1.tail=1;
q2.head=1;q2.tail=1;
//初始化栈
s.top=0;
// 初始化数组,记录桌面上的牌
for(i=1;i<=9;i++)
book[i]=0;
//向队列中插入六张牌
//小胖手中的牌
for(i=1;i<=6;i++)
{
scanf("%d",&q1.data[q1.tail]);
q1.tail++;
}
//大胖手中的牌
for(i=1;i<=6;i++)
{
scanf("%d",&q2.data[q2.tail]);
q2.tail++;
}
//队列不为空
while(q1.head<q1.tail && q2.head<q2.tail)
{
t=q1.data[q1.head];//小胖出一张牌
//判断小胖出的牌能否能赢
if(book[t]==0)//表明桌面没有t牌
{
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--;//栈中少牌,栈顶减1
}
}
t=q2.data[q2.head];//大胖出一张牌
//判断大胖出的牌能否能赢
if(book[t]==0)//表明桌面没有t牌
{
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--;//栈中少牌,栈顶减1
}
}
}
//判断赢牌结果
if(q2.head==q2.tail)
{
printf("小胖win");
printf("手牌\n");
for(i=q1.head;i<=q1.tail-1;i++)
printf("%d ",q1.data[i]);
printf("\n");
if(s.top>0)
{
printf("桌面上的牌是\n");
for(i=1;i<=s.top;i++)
printf("%d ",s.data[i]);
}
else
printf("桌面上没牌啦");
}
else
{
printf("大胖win");
printf("手牌\n");
for(i=q2.head;i<=q2.tail-1;i++)
printf("%d ",q2.data[i]);
if(s.top>0)
{
printf("桌面上的牌是\n");
for(i=1;i<=s.top;i++)
printf("%d ",s.data[i]);
}
else
printf("桌面上没牌啦");
}
return 0;
}
栈和队列的综合使用
最新推荐文章于 2024-08-17 08:45:02 发布