搜狐笔试题:扎金花

 两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。

游戏规则:
共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

输出例子:

1
1
-1
-1
1
1
-1

#include
#include
#include
#include

using namespace std;

vector str2nums(string str){//字符串转整型数组
	vector nums;

	int i = 0;
	while(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& 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& nums1, vector& 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 nums1, nums2;

	nums1 = str2nums(str1);
	nums2 = str2nums(str2);

	//非法输入
	if(nums1.size()!=3 || nums2.size()!=3){
		cout<<-2<


你可能感兴趣的:(笔试题)