马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
struct queue//手牌
{
int data[1000];
int head;
int tail;
};
struct stack//牌库
{
int data[10];
int top;
};
int main()
{
struct queue* q1=(struct queue*)malloc(sizeof(struct queue));
struct queue* q2=(struct queue*)malloc(sizeof(struct queue));
struct stack* s=(struct stack*)malloc(sizeof(struct stack));
q1->head=0;
q1->tail=0;
q2->head=0;
q2->tail=0;
s->top=-1;
//扑克牌拉大车
//队列记录1,2手中的牌,栈记录牌库
int i,t;
//往1,2 手中输送6张牌
for(i=0;i<6;i++)
{
scanf("%d",&q1->data[q1->tail]);
q1->tail++;
}
for(i=0;i<6;i++)
{
scanf("%d",&q2->data[q2->tail]);
q2->tail++;
}
int book[10]={0};//记录栈里每张牌地数量
while(q1->head<q1->tail && q2->head<q2->tail)
{
t=q1->data[q1->head];//储存1打出的牌
if(book[t]==0)//无相同牌的情况
{
book[t]=1;//数量+1
q1->head++;//打出
s->top++;
s->data[s->top]=t;//进入牌库
}
else//有相同牌的情况
{
q1->head++;//打出
q1->data[q1->tail]=t;
q1->tail++;//回收
while(s->data[s->top]!=t)//回收牌库里面的牌
{
q1->data[q1->tail]=s->data[s->top];
q1->tail++;
s->top--;
}
q1->data[q1->tail]=s->data[s->top];//回收那张相同的牌
q1->tail++;
s->top--;
book[t]=0;
}
if(q1->head==q1->tail)break;//1手牌没了,输了
t=q2->data[q2->head];
if(book[t]==0)
{
book[t]++;
s->top++;
s->data[s->top]=t;
q2->head++;
}
else
{
q2->head++;
q2->data[q2->tail]=t;
q2->tail++;
while(s->data[s->top]!=t)
{
q2->data[q2->tail]=s->data[s->top];
q2->tail++;
s->top--;
}
q2->data[q2->tail]=s->data[s->top];
q2->tail++;
s->top--;
book[t]=0;
if(q2->head==q2->tail)break;
}
}
if(q1->head==q1->tail)
{
printf("1win");
// printf("2手上的牌是:");
// while(q2->head!=q2->tail)
// {
// printf("%d ",q2->data[q2->head]);
// q2->head++;
// }
// printf("桌上的牌是:");
// while(s->top>=0)
// {
// printf("%d ",s->data[s->top]);
// s->top--;
// }
}
else{
printf("2win");
}
free(q1);
free(q2);
free(s);
return 0;
}
|