两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。
游戏规则:
共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。
对于牌型的规则如下:
1.三张牌一样即为豹子
2.三张牌相连为顺子(A23不算顺子)
3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2>10104) 在二人均无特殊牌型时,依次比较三张牌中最大的。大的人获胜,如果最大的牌一样,则比较第二大,以此类推(如37K>89Q) 如二人牌面相同,则为平局。
输入描述:
输入两个字符串代表两个玩家的牌(如"10KQ" "354"),先输入的作为玩家1,后输入的作为玩家2
输出描述:
1 代表 玩家1赢 0 代表 平局 -1 代表 玩家2赢 -2 代表不合法的输入
输入例子:
KQ3 3Q9
10QA 6102
5810 7KK
632 74J
10102 K77
JKJ 926
68K 27A
输出例子:
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> str2nums(string str){//字符串转整型数组
vector<int> nums;
int i = 0;
while(i<str.length()){
if(str[i] == '1'){
nums.push_back(10);
i += 2;
}
else{
if(str[i] == 'J')
nums.push_back(11);
else if(str[i] == 'Q')
nums.push_back(12);
else if(str[i] == 'K')
nums.push_back(13);
else if(str[i] == 'A')
nums.push_back(14);
else if(str[i] >= '2' && str[i] <= '9')
nums.push_back(str[i] - '0');
else
nums.push_back(-1);//非法输入
i++;
}
}
sort(nums.begin(), nums.end());
return nums;
}
int getCot(vector<int>& nums){//获取牌面类型,1-4分别代表不同牌面
if(nums[0] == nums[1] && nums[1] == nums[2])//豹子
return 1;
else if(nums[0]+1 == nums[1] && nums[1]+1 == nums[2])//顺子
return 2;
else if(nums[0] ==nums[1] || nums[1] == nums[2])//对子
return 3;
else//单牌
return 4;
}
int comp(vector<int>& nums1, vector<int>& nums2){//比较大小
int cot1, cot2;
cot1 = getCot(nums1);
cot2 = getCot(nums2);
if(cot1 < cot2)
return 1;
else if(cot2 > cot2)
return -1;
else{
if(cot1 == 1 || cot1 == 2){
if(nums1[0] > nums2[0])
return 1;
else if(nums1[0] < nums2[0])
return -1;
else
return 0;
}
else if(cot1 == 3){
int pair1 = nums1[0];
if(nums1[0] != nums1[1] && nums1[0] != nums1[2])
pair1 = nums1[1];
int pair2 = nums2[0];
if(nums2[0] != nums2[1] && nums2[0] != nums2[2])
pair2 = nums2[1];
if(pair1 > pair2)
return 1;
else if(pair1 < pair2)
return -1;
else
return 0;
}
else{
for(int i=2; i>=0; i--){
if(nums1[i] > nums2[i])
return 1;
else if(nums1[i] < nums2[i])
return -1;
}
return 0;
}
}
}
int fun(){
string str1, str2;
cin>>str1;
if(str1 == "EOF")//输入终止
return -1;
cin>>str2;
vector<int> nums1, nums2;
nums1 = str2nums(str1);
nums2 = str2nums(str2);
//非法输入
if(nums1.size()!=3 || nums2.size()!=3){
cout<<-2<<endl;
return 0;
}
for(int i=0; i<3; i++){
if(nums1[i] == -1 || nums2[i] == -1){
cout<<-2<<endl;
return 0;
}
}
int res = comp(nums1, nums2);
cout<<res<<endl;
return 0;
}
int main(){
while(1)
if(fun() != 0)
break;
return 0;
}