zoukankan      html  css  js  c++  java
  • Soldiers and cards

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/B

    题意:

           士兵两两之间进行打牌游戏,出牌有规定:双方从首牌依次出起,每一次出的两只牌牌面进行比较,面值大的一方,两只牌归其所有,不过收牌有一定要求,即两只牌要放在自己牌面底端,且先插入对方所出牌面,再插入己方牌面,问:给出双方牌面,判断能否产生输赢,产生输赢后出了几次牌,而谁又能赢?

           输入要求:首行输入总牌数,第二行输入士兵甲拥有的牌的数目及每只牌的面值(用空格符分隔),第三行输入士兵乙拥有的牌的数目及每只牌的面值(用空格符分隔);

           输出要求:不能产生输赢则直接输出'-1’,否则单行输出出牌次数和赢家(用空格符分隔)。
    案例:

                  Input
            4
    
    2 1 3
    2 4 2
                 Output
            6 2
                  Input
            3
    
    1 2
    2 1 3
                 Output
           -1
    
    
    
    图示: 案例一:
    
    案例二:
    
        
    分析:
    这是一个队列问题,可将双方牌面设为两个队列,每一次进行队首元素的比较,入队采用push语句,任一队列为空即结束游戏。具体思路见源代码注释。

      源代码:

     1 #include<cstdio>
     2 #include<queue>//队列的头文件声明
     3 using namespace std;
     4 int main()
     5 {
     6     int n,k1,k2,i,m,p1,p2,count,test;
     7     while(scanf("%d",&n)!=EOF)
     8     {   queue<int> q1,q2;//建立两个队列
     9         count=0;
    10         scanf("%d",&k1);
    11         for(i=0;i<k1;i++)//队列q1:元素入队
    12         {    scanf("%d",&m);
    13             q1.push(m);
    14         }
    15         scanf("%d",&k2);
    16         for(i=0;i<k2;i++)//队列q2:元素入队
    17         {   scanf("%d",&m);
    18             q2.push(m);
    19         }
    20         while(1)    
    21     {    if(q1.empty()||q2.empty())//任一队列为空,结束游戏
    22         {   test=1;//游戏出牌有限次后结束判别语句
    23             break;
    24         }
    25         else
    26         {   p1=q1.front();//队列q1首牌数值
    27             p2=q2.front();//队列q2首牌数值
    28             q1.pop();//队列q1出首牌
    29             q2.pop();//队列q2出首牌
    30             if(p1>p2)//牌面面值比较
    31             {  q1.push(p2);//队1赢,两只牌依次入队1
    32                q1.push(p1);
    33             }
    34             else
    35             {  q2.push(p1);//队2赢,两只牌依次入队2
    36                q2.push(p2);
    37             }
    38             count++;//出牌次数
    39             if(count==1e4)//游戏无限循环,无输赢结束判别语句
    40             {   test=0;
    41                 break;
    42             }
    43         }
    44     }
    45         if(test)//判断能否产生输赢
    46             printf("%d %d
    ",count,q1.empty()?2:1);//判别赢家
    47         else printf("-1
    ");        
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Webpack 学习笔记总结
    Ctrl+C和Ctrl+V无法使用
    mysql默认字符集问题
    Makefile 简述
    Shell编程学习之重定向
    Shell编程学习之Shell编程基础(一)
    Linux系统目录
    关于Linux部分版本无法安装Chrome的问题
    整数算术溢出问题的分析
    Linux中的/etc/nologin问题
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4676002.html
Copyright © 2011-2022 走看看