• 扑克牌游戏


    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 !
  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/sjlove/p/3148051.html
Copyright © 2020-2023  润新知