题目:
两人扑克牌游戏,初始每个人6张手牌,从牌堆顶轮流出牌,放到桌子上,假如出的牌和桌上的牌一样,收走这两张牌和中间的牌。直到一人手牌为空,另一人获胜
代码:
#include<stdio.h>
#include<stdlib.h>
//用来装小哼小哈的手牌
typedef struct queue
{
int data[1000];
int head;
int tail;
}queue;
//用来装桌面牌队
//这个栈下标是1~10,0被弃用了
typedef struct stack
{
int data[10];//因为只有1~10十种牌面
int top;
}stack;
int main()
{
//声明
queue q1,q2;
stack s;
//用来桶装桌面的牌,从而判断是否赢牌
int book[10];
int i,t;
//初始化
q1.head=1;q1.tail=1;
q2.head=1;q2.tail=1;
s.top=0;//没有-1
book[10]={0};
//插眼
//q1小哼入队6张牌
for(i=1;i<=6;i++)
{
scanf("%d",&(q1.data[q1.tail]));
q1.tail++;
}
//q2小哈入队6张牌
for(i=1;i<=6;i++)
{
scanf("%d",&(q2.data[q2.tail]));
q2.tail++;
}
//所有人手牌均不为空时执行
while(q1.head<q1.tail&&q2.head<q2.tail)
{
//q1小哼准备出队的一张牌是否赢了牌
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)
{
// 取消标记(顶多2张,现在没了)
book[s.data[s.top]]=0;
//入队
q1.data[q1.tail]=s.data[s.top];
q1.tail++;
//出栈
s.top--;
}
}
//模仿 //q2小哈准备出队的一张牌是否赢了牌
t=q2.data[q2.head];
//没有赢:出队,入栈,标记
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)
{
// 取消标记(顶多2张,现在没了)
book[s.data[s.top]]=0;
//入队
q2.data[q2.tail]=s.data[s.top];
q2.tail++;
//出栈
s.top--;
}
}
}
//end模仿
if(q2.head==q2.tail)
{
printf("q1小哼赢");
}
else
{
printf("q2小哈赢");
}
system("pause");
return 0;
}
调试:
未知错误,无法理解,能力不够,理解意思即可