• 纸牌游戏——队列和栈的应用


    #include<stdio.h>
    struct queue
    {
    int date[1000];
    int head;
    int tail;
    };//将小哼和小哈的牌定为队列

    struct stack
    {
    int date[10];
    int top;
    };//将桌上的牌定为栈
    int main()
    {
    struct queue q1,q2;
    struct stack s;
    int i,t;
    int book[10];//将桌上的牌存入,如有则为1,如没有,则为默认值0

    q1.head=1;
    q1.tail=1;
    q2.head=1;
    q2.tail=1;
    s.top=0;

    for(i=1; i<=9; i++)
    book[i]=0;//此时桌上没有牌
    for(i=1; i<=6; i++)//读入少哼手中的牌
    {
    scanf("%d",&q1.date[q1.tail]);
    q1.tail++;
    }
    for(i=1; i<=6; i++)//读入小哈手中的牌
    {
    scanf("%d",&q2.date[q2.tail]);
    q2.tail++;
    }
    while(q1.head<q1.tail && q2.head<q2.tail)//当小哼和小哈手中的牌都不为空时
    {
    t=q1.date[q1.head];//小哼将手中的第一张牌打到桌上
    if(book[t]==0)//如果桌上没有与小哼出的牌相同的话
    {
    q1.head++;//出队
    s.top++;//入栈
    s.date[s.top]=t;
    book[t]=1;//此时桌上已有这张面值的牌了
    }
    else//如果桌上有与小哼出的牌相同的话
    {
    q1.head++;//出队
    q1.date[q1.tail]=t;//将出队的牌入队,放到最后一张
    q1.tail++;
    while(s.date[s.top]!=t)//将桌上的牌一张一张的放入小哼的手中
    {
    book[s.date[s.top]]=0;//将出栈的牌置为0
    q1.date[q1.tail]=s.date[s.top];//入队
    q1.tail++;
    s.top--;
    }
    book[s.date[s.top]]=0;//将最后一张与出队的牌相同面值的牌也入队到手中
    q1.date[q1.tail]=s.date[s.top];
    q1.tail++;
    s.top--;
    }
    if(q1.head==q1.tail) break;//如果此时小哼手中已没有牌了,小哈获胜

    //下面的与小哼同款
    t=q2.date[q2.head];
    if(book[t]==0)
    {
    q2.head++;
    s.top++;
    s.date[s.top]=t;
    book[t]=1;
    }
    else
    {
    q2.head++;
    q2.date[q2.tail]=t;
    q2.tail++;
    while(s.date[s.top]!=t)
    {
    book[s.date[s.top]]=0;
    q2.date[q2.tail]=s.date[s.top];
    q2.tail++;
    s.top--;
    }
    book[s.date[s.top]]=0;
    q2.date[q2.tail]=s.date[s.top];
    q2.tail++;
    s.top--;
    }
    }
    if(q2.head==q2.tail)
    {
    printf("小哼win ");
    printf("小哼当前手中的牌是");
    for(i=q1.head; i<=q1.tail; i++)
    printf(" %d",q1.date[i]);
    if(s.top>0)
    {
    printf(" 桌山上的牌是");
    for(i=1; i<s.top; i++)
    printf(" %d",s.date[i]);
    }
    else printf(" 桌上已经没有拍了");
    }
    else
    {
    printf("小哈win ");
    printf("小哈当前手中的牌是");
    for(i=q2.head; i<=q2.tail; i++)
    printf(" %d",q2.date[i]);
    if(s.top>0)
    {
    printf(" 桌山上的牌是");
    for(i=1; i<s.top; i++)
    printf(" %d",s.date[i]);
    }
    else printf(" 桌上已经没有拍了");
    }

    return 0;
    }

  • 相关阅读:
    常见树的总结
    《深入理解Java虚拟机》读书笔记(第三章)
    《Jave并发编程的艺术》学习笔记(1-2章)
    Java多线程与并发之面试常问题
    Morris遍历-如何用空间复杂度O(1)来遍历二叉树
    BFPRT算法
    Manacher
    maven基础
    play framework + sbt入门之环境搭建
    rancher部署kubernets集群
  • 原文地址:https://www.cnblogs.com/wudidamowang666/p/6506585.html
Copyright © 2020-2023  润新知