输入2 4 1 2 5 6 3 1 3 5 6 4调试发现s>top一直在减,哪里错了啊
#include<stdio.h>#include<stdlib.h>
#include<math.h>
#include<string.h>
structqueue//手牌
{
int data;
int head;
int tail;
};
struct stack//牌库
{
int data;
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++;
}
for(i=0;i<6;i++)
{
scanf("%d",&q2->data);
q2->tail++;
}
int book={0};//记录栈里每张牌地数量
while(q1->head<q1->tail && q2->head<q2->tail)
{
t=q1->data;//储存1打出的牌
if(book==0)//无相同牌的情况
{
book=1;//数量+1
q1->head++;//打出
s->top++;
s->data=t;//进入牌库
}
else//有相同牌的情况
{
q1->head++;//打出
q1->data=t;
q1->tail++;//回收
while(s->data!=t)//回收牌库里面的牌
{
q1->data=s->data;
q1->tail++;
s->top--;
}
q1->data=s->data;//回收那张相同的牌
q1->tail++;
s->top--;
book=0;
}
if(q1->head==q1->tail)break;//1手牌没了,输了
t=q2->data;
if(book==0)
{
book++;
s->top++;
s->data=t;
q2->head++;
}
else
{
q2->head++;
q2->data=t;
q2->tail++;
while(s->data!=t)
{
q2->data=s->data;
q2->tail++;
s->top--;
}
q2->data=s->data;
q2->tail++;
s->top--;
book=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++;
// }
// printf("桌上的牌是:");
// while(s->top>=0)
// {
// printf("%d ",s->data);
// s->top--;
// }
}
else{
printf("2win");
}
free(q1);
free(q2);
free(s);
return 0;
}
页:
[1]