╰‵随风 2022-01-20 14:54 采纳率: 50%
浏览 26

c语言啊哈算法小猫钓鱼的疑问如何修改

扑克游戏:
将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张放在桌上,就这样两人交替出牌。
出牌时,若某人打出的牌与桌面上的某张牌面相同,即将两张相同的牌以及中间的全部取走,并依次放在自己手中牌的末尾。当任意一人手中的牌全部取完时,游戏结束,对手获胜。
思路:
小哼和小哈有两种操作:出牌和赢牌,即对应出队和入队。桌子即相当于栈,打出一张牌和取走牌对应入栈和出栈

问题1
岂不是跟他相同的那个不会被收走

while(s.data[s.top]!=t)     <---岂不是跟他相同的那个不会被收走
            {
                book[s.data[s.top]] = 0;//取消标记 
                q2.data[q2.tail] = s.data[s.top]; 
                printf("收掉的牌: %d\n",s.data[s.top]) ;
                q2.tail++; 
                s.top--;
            }

问题2

用桶排序存数就把桌子上的数排序了取出来就不是原先的顺序了啊


            for(i=1;i<=9;i++)
                 book[i]=0;//标记初始化,标记桌子上那些牌

            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]; 
                printf("收掉的牌: %d\n",s.data[s.top]) ;
                q1.tail++; 
                s.top--;
            }
#include<stdio.h>
struct queue //定义一个队的结构体 放两个人手中的牌 
{
    int data[1000];
    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; q2.head = 1;
    q1.tail = 1; q2.tail = 1;//初始化队列 
    s.top = 0;//初始化栈 
    for(i=1;i<=9;i++)
        book[i]=0;//标记初始化,标记桌子上那些牌 
    
    for(i=1;i<=6;i++)//向队列q1中插入6张牌 
    {
        scanf("%d",&q1.data[q1.tail]);
        q1.tail++;
    }
    for(i=1;i<=6;i++)//向队列q2中插入6张牌 
    {
        scanf("%d",&q2.data[q2.tail]);
        q2.tail++;
    }
    
 
    while(q1.tail>q1.head && q2.head<q2.tail)
    {
        t = q1.data[q1.head];//q1出牌
        if(book[t]==0)//判断是否有牌可收  
        {
            q1.head++;
            s.top++;
            s.data[s.top] = t;
            book[t]=1;
            printf("%d ",t);
            for(i=1;i<=s.top;i++)
                printf("桌子上的: %d ",s.data[i]);
            printf("A %d\n",s.top);
        }
        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]; 
                printf("收掉的牌: %d\n",s.data[s.top]) ;
                q1.tail++; 
                s.top--;
            }
        }
        
        t = q2.data[q2.head];//q1出牌
        if(book[t]==0)//判断是否有牌可收  
        {
            q2.head++;
            s.top++;
            s.data[s.top] = t;
            book[t]=1;
            printf("%d ",t);
            for(i=1;i<=s.top;i++)
                printf("桌子上的: %d ",s.data[i]);
            printf("B %d\n",s.top);
        }
        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]; 
                printf("收掉的牌: %d\n",s.data[s.top]) ;
                q2.tail++; 
                s.top--;
            }
        }
    }
    
    if(q2.tail==q2.head)
    {
        printf("A win");
        printf("A 当前牌:");
        for(i=q1.head;i<=q1.tail-1;i++)
            printf("%d",q1.data[i]);
        
        if(s.top>0)
        {
            printf("桌子上的牌");
            for(i=1;i<=s.top;i++)
                printf("%d",s.data[i]); 
        }
        else
            printf("桌子上没牌啦!!"); 
    }
    else
    {
        printf("B win");
        printf("B 当前牌:");
        for(i=q2.head;i<=q2.tail-1;i++)
            printf("%d",q2.data[i]);
        
        if(s.top>0)
        {
            printf("桌子上的牌");
            for(i=1;i<=s.top;i++)
                printf("%d",s.data[i]); 
        }
        else
            printf("桌子上没牌啦!!"); 
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 藏猊 2022-01-20 15:26
    关注

    一副扑克牌哪来的相同的牌?所以是两副牌,108张?

    评论

报告相同问题?

问题事件

  • 修改了问题 1月20日
  • 修改了问题 1月20日
  • 请详细说明问题背景 1月20日
  • 创建了问题 1月20日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)