• 扑克牌游戏


    Bryan和Neo在玩扑克游戏, 游戏的玩法是两人从一副没有大小王的扑克牌中各抽三张牌比大小。牌的大小关系为2<3<4<…9<10<J<Q<K<A。每个人的三张牌有如下4种类型:

        1. 三张一样的牌,如(A A A)、(2 2 2)

        2. 点数连续的三张牌, 如(2 3 4)、(10 J Q),但(A 2 3)不是。

        3. 一个对带一张,如(2 2 3)、(10 10 Q)。

        4. 三张不一样的牌,如(A 2 3)、(10 9 7),但(10 9 8)算在第2种类型。

    比较大小的规则如下:

        1. 若两人牌的类型不同:类型1>类型2>类型3>类型4。

        2. 同为类型1:两人任意出一张,比较点数,点数大者胜。

        3. 同为类型2:两人比较最大的牌的点数,点数大者胜。

        4. 同为类型3:两人先比较一对的点数,若相同,再比较单张的点数,点数大者胜。

        5. 同为类型4:两人相比较最大的点数,若相同,再比较次大的点数,若相同,最后比较最小的点数,点数大者胜。

    比较的结果有3种:胜、负、平。现在给出Bryan和Neo各自的三张牌,若Bryan胜,输出win,若Neo胜,输出lose,如果平局,输出draw。

    上代码:

      1 #include <iostream>
      2 #include <map>
      3 #include <algorithm>
      4 using namespace std;
      5 
      6 int Type(int arr1[])
      7 {
      8     if( (arr1[0]==arr1[1]) && arr1[1]==arr1[2] )
      9         return 1;
     10     else if( ( (arr1[0]+1)==arr1[1] ) && (arr1[1]+1==arr1[2]) )
     11         return 2;
     12     else if( (arr1[0]==arr1[1]) || (arr1[1]==arr1[2]) )
     13         return 3;
     14     else
     15         return 4;
     16     
     17 }
     18 
     19 int r_help(int a[])
     20 {
     21     int temp;
     22     if(a[0]==a[1])
     23         temp= a[2];
     24     else
     25         temp= a[0];
     26     return temp;
     27 }
     28 
     29 void cardCompare(int array1[],int array2[])
     30 {
     31     if(Type(array1)==1)
     32     {
     33         if(Type(array2)==1)
     34         {
     35             if(array1[0]>array2[0])
     36                 cout<< "C1 win " << endl;
     37             else if(array1[0]<array2[0])
     38                 cout<< "C1 lose " << endl;
     39         }
     40         else
     41             cout<< "C1 win " << endl;
     42     }
     43     if(Type(array1)==2)
     44     {
     45         if(Type(array2)==1)
     46             cout<< "C1 lose " << endl;
     47         else if(Type(array2)==2)
     48         {
     49             if(array1[0]==array2[0])
     50                 cout<< "Draw " << endl;
     51             if(array1[2]>array1[2])
     52                 cout<< "C1 win " << endl;
     53             if(array1[2]<array2[2])
     54                 cout<< "C1 lose " << endl;
     55         }
     56         else
     57             cout<< "C1 win " << endl;
     58     }
     59     if(Type(array1)==3)
     60     {
     61         if(Type(array2)==1 || Type(array2)==2)
     62             cout<< "C1 lose " << endl;
     63         else
     64             if(Type(array2)==3)
     65             {
     66                 if(array1[1]>array2[1])
     67                     cout<< "C1 win " << endl;
     68                 else if(array1[1]<array2[1])
     69                     cout<< "C1 lose " << endl;
     70                 else 
     71                 {
     72                    if(r_help(array1)>r_help(array2))
     73                        cout<< "draw "  << endl;
     74                    else if(r_help(array1)<r_help(array2))
     75                        cout<< "C1 lose " << endl;
     76                    else 
     77                        cout<< "Draw " << endl;
     78                 }
     79             }
     80     }
     81     if(Type(array1)==4)
     82     {
     83         if(Type(array2)==1 || Type(array2)==2 || Type(array2)==3)
     84             cout<< "C1 lose " << endl;
     85         else
     86         {
     87             if(array1[2]>array2[2])
     88                 cout<< "C1 win " << endl;
     89             else if(array1[2]<array2[2])
     90                 cout<< "C1 lose " << endl;
     91             else
     92             {
     93                 if(array1[1]>array2[1])
     94                     cout<< "C1 win " << endl;
     95                 else if(array1[1]<array2[1])
     96                     cout<< "C1 lose " << endl;
     97                 else
     98                 {
     99                     if(array1[0]>array2[0])
    100                         cout<< "C1 win " << endl;
    101                     else if(array1[0]<array2[0])
    102                         cout<< "C1 lose " <<endl;
    103                     else
    104                         cout<< "Draw " <<endl;
    105                 }
    106             }
    107         }
    108     }
    109 }
    110 
    111             
    112 
    113 int main()
    114 {
    115     char card[]={'2', '3', '4', '5','6','7','8','9','10','J','Q','K','A'};
    116     map<char,int> cardm;
    117     for(int i=0;i<13;i++)
    118     {
    119         cardm[card[i]] = i;
    120     }
    121     char card1[3];
    122     char card2[3];
    123     int arra[3];
    124     int arrb[3];
    125     int n;
    126     cin>> n;
    127     while(n--)
    128     {
    129         for(int i=0;i<3;i++)
    130         {
    131             cin>> card1[i];
    132             arra[i] = cardm[card1[i]];
    133         }
    134         for(int j=0;j<3;j++)
    135         {
    136             cin>> card2[j];
    137             arrb[j] = cardm[card2[j]];
    138         }
    139         sort(arra, arra+3);
    140         sort(arrb, arrb+3);
    141         cardCompare(arra, arrb);
    142     }
    143     return 0;
    144 }
    145     

    程序运行结果:

     小结一下:

    用到了STL泛型,头文件<algorithm> <map>

    关键是找到除大小王之外的剩余扑克牌的存储方式--->

    char card[]={'2', '3', '4', '5','6','7','8','9','10','J','Q','K','A'};

    用map<char, int> 对每个扑克牌字符 进行映射为int型的0,1,2,3,4,5,6,7,8,9,10,11,12

     

    Fight fight fight ! 你有你的奇迹 ! Fight fight fight ! Just to be yourself !
  • 相关阅读:
    hdu4639 hehe ——斐波纳契数列,找规律
    codefoces round193a
    codeforces 192e
    abbyy cup a
    年中总结
    codeforces 192a
    codeforces 192b
    codeforces 192 c
    codeforces 192 D
    codeforces magic five --快速幂模
  • 原文地址:https://www.cnblogs.com/sjlove/p/3148051.html
Copyright © 2020-2023  润新知