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