zoukankan      html  css  js  c++  java
  • 纸牌游戏——队列和栈的应用

    #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;
    }

  • 相关阅读:
    bzoj 2084: Antisymmetry 回文自动机
    bzoj 1819: 电子字典 Trie
    bzoj 1398: 寻找主人 AC自动机+最小表示法
    bzoj 4199: [Noi2015]品酒大会 后缀树
    bzoj 4044: Virus synthesis 回文自动机
    信用风险评分卡研究-第4章笔记
    信用风险评分卡研究-第3章笔记
    信用风险评分卡研究-第2章笔记
    信用风险评分卡研究-第1章笔记
    评分卡建模流程目录
  • 原文地址:https://www.cnblogs.com/wudidamowang666/p/6506585.html
Copyright © 2011-2022 走看看