华为:干瞪眼_干瞪眼游戏大厅

(37) 2024-09-20 23:01:01
/* 干瞪眼 问题描述: 在成都,流行一种扑克游戏叫“干瞪眼”。使用扑克牌,包括:A(1),2,3,4,5,6,7,8,9,T(10),J(11),Q(12),K(13)。 注意:10用T替换,这里暂时不考虑大鬼和小鬼。 两手牌的大小规则如下: a) 单牌:4比3大,5比4大,只有两张牌刚好大一点时才能进行比较,比较顺序为:A>K>Q>J>T>9>8>7>6>5>4>3。 比如:6大于5,但是不能比4大,6和4不能比较。单牌2属于特殊牌,他可以和其他所有普通单牌比较, 并且是最大的。 请注意3,他不能大于任何牌。 b) 对子:即两张牌的点数相同,规则和单牌相似,也需要进行类似处理。两个2是特殊对子, 可以大于所有的其他对子。 注意:对子和单牌是不能进行比较的。 c) 炸弹:3个点数相同的牌。炸弹可以大于任何单张和对子,炸弹之间的比较不用像单牌和对子那样, 只能大一点才能比较。 只要满足:222>AAA>KKK>Q>JJJ>TTT>…>333的规则的即可。即222是最大的,AAA可以大于KKK,也可以大于333。 d) 其他规则暂不考虑实现 现在请你实现一个程序,自动判断两手牌的大小,注意:输入的牌只会出现3种类型:单张,对子,炸弹。 张数最多3张。 不会出现2个单牌。比如”25”,也不会出现一个对子加单牌,比如”334”等,类似输入异常你可以不用考虑。 但是pFirstCards为单牌,pSecondCards为对子,类似的组合输入是合法的。 要求实现函数: int CompareCards(char *pFirstCards, char *pSecondCards) 【输入】 char *pFirstCards:需要比较的第一手牌 char *pSecondCards:需要比较的第二手牌 【返回】 int 类型,返回值说明: 如果pFirstCards和 pSecondCards无法比较,比如”3”和”6”;”55”和”6”等,返回0。 如果pFirstCards大于pSecondCards,返回1。 如果pFirstCards等于 pSecondCards,返回2。 如果pFirstCards小于 pSecondCards,返回3。 注意:不用考虑输入的合法性,这个由函数的使用者保证。输入的牌均为字符’1’,’2’..’9’,大写的’A’,’T’,’J’,’Q’,’K’。 示例 输入: “77”、 “33”,返回:0 输入: “77”、 “77”,返回:2 */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAX=256; int CompareCards(char *pFirstCards, char *pSecondCards) { char hash[MAX]={0}; char table[]="2AKQJT"; for(int i=0;i<15;i++) { hash[table[i]]=i; } int len1=strlen(pFirstCards),len2=strlen(pSecondCards); //先考虑有炸弹的情况 if(len1==3&&len2<3)return 1; if(len2==3&&len1<3)return 3; if(len1==3&&len2==3) { if(hash[*pFirstCards]>hash[*pSecondCards])return 3; if(hash[*pFirstCards]<hash[*pSecondCards])return 1; if(hash[*pFirstCards]==hash[*pSecondCards])return 2; } //考虑没有炸弹的情况,考虑对子的情况 if(len1==2&&len2==2) { if((hash[*pFirstCards]-hash[*pSecondCards])==0)return 2; if(hash[*pFirstCards]==0)return 1; if(hash[*pSecondCards]==0)return 3; if((hash[*pFirstCards]-hash[*pSecondCards])==1)return 3; if((hash[*pFirstCards]-hash[*pSecondCards])==-1)return 1; } //考虑单子的情况 if(len1==1&&len2==1) { if((hash[*pFirstCards]-hash[*pSecondCards])==0) return 2; if(hash[*pFirstCards]==0)return 1; if(hash[*pSecondCards]==0)return 3; if((hash[*pFirstCards]-hash[*pSecondCards])==1)return 3; if((hash[*pFirstCards]-hash[*pSecondCards])==-1)return 1; } return 0; } int main() { char *p1="777",*p2="777"; cout<<"CompareCards "<<CompareCards(p1,p2)<<endl; } 

THE END

发表回复