wcccs 发表于 2022-3-20 12:07:21

输入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]
查看完整版本: 输入2 4 1 2 5 6 3 1 3 5 6 4调试发现s>top一直在减,哪里错了啊