绝地武士的传人:Java程序练习-A-黑帝君临

描述
西斯皇帝欺骗了议员,控制了议会。绝地武士传人Dastan为了正义,与西斯决斗。然而,西斯的天眼看出Dastan是个投机主义者。于是,西斯告诉Dastan,如果决斗的话会伤害的无辜的人,不如玩一把showhand,输的人将被流放。
ShowHand是一项紧张刺激的赌博游戏(香港赌神、赌侠系列中最常见的赌博方式)。以五张牌的排列、组合决定胜负。游戏开始时,每名玩家会获发一张底牌(此牌只能在最后才翻开);当派发第二张牌后,便由牌面较佳者决定下注额,其他人有权选择「跟」、「加注」、「放弃」或「晒冷」。当五张牌派发完毕后,各玩家翻开所有底牌来比较。
花式说明
黑桃♤>红心♥>方片◇>梅花♣
牌面说明
一共52张牌,23456789TJQKA 13张牌每种花式一套。 (T代表10)
A>K>Q>J>T>9>8>7>6>5>4>3>2
牌型说明
如果没有特殊说明,一般情况下同样的牌型比较最大的那张牌的大小,大小相同则比最大的那张牌的花式。牌型由大到小依次如下(有兴趣的同学可以验证一下概率)。
No.1同花顺 拥有五张连续性同花色的顺子。以A为首的同花顺(TJQKA)最大。但JQKA2,QKA23,KA234不算顺子。A2345是最小的同花顺。
No.2铁支 四张相同数字的牌,外加一单张。比数字大小,「A」铁支(AAAA)最大
No.3葫芦 由「三条」加一个「对子」所组成的牌,若别家也有此牌型,则比三条数字大小
No.4同花 不构成顺子的五张同花色的牌。先比数字最大的单张,如相同再比第二支、依此类推,如果5张牌大小都相同,那么比它们的花色。
No.5顺子 五张连续数字的牌组。 以A为首的顺子最大,如果大家都是顺子,比最大的一张牌,如果大小还一样就比这张牌的花式(JQKA2,QKA23,KA234不算顺子).
No.6三条 牌型由三张相同的牌组成,以A为首的三条(AAA)最大
No.7二对 牌型中五张牌由两组两张同数字的牌所组成。若遇相同则先比这副牌中最大的一对,如又相同再比第二对,如果还是一样,比大对子中的最大花式
No.8对子 牌型由两张相同的牌加上三张单张所组成。如果大家都是对子,比对子的大小,如果对子也一样,比这个对子中的最大花色
No.9散牌 单一型态的五张散牌所组成,不成对(二对),不成三条,不成顺(同花顺),不成同花,不成葫芦,不成铁支。先比最大一张牌的大小,如果大小一样,比这张牌的花色。

输入
多组测试数据。每组输入第一行是一个整数T 代表输入组数。每组输入一行,每行描述5张扑克,每个描述由一个字符(2-9,TJQKA)和一个数字(0-4分别代表黑桃,红桃,方片,梅花)组成。每个字符或数字用一个空格隔开。输出
每组数据,请输出牌型所对应的编号。

Sample Input
4
A 3 Q 3 T 3 K 3 J 3
K 0 K 1 K 2 K 3 A 0
T 0 9 1 T 3 9 3 3 3
K 0 A 1 2 2 3 1 4 1
Sample Output
1
2
7
9
分析
按照描述一步一步写程序,可能会涉及排序和查找.

参考代码

/* * Title :...* From :...* Time :...* Author :Eric Zhou,binfeihan* Email :binfeihan@126.com* Blog :http://blog.csdn.net/binfeihan*/import java.util.*;class Card{public char point;public int value;};public class Main {final public static int CN = 5;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int cases = sc.nextInt();Card card[] = new Card[CN];sc.nextLine();while(cases > 0){String s = sc.nextLine();String sd[] = s.split(" ");for(int i = 0;i < CN;++ i){card[i] = new Card();int j = i * 2;card[i].point = sd[j].charAt(0);switch(card[i].point){case 'T':card[i].point = '9' + 1;break;case 'J':card[i].point = '9' + 2;break;case 'Q':card[i].point = '9' + 3;break;case 'K':card[i].point = '9' + 4;break;case 'A':card[i].point = '9' + 5;break;default:break;}card[i].value = sd[j + 1].charAt(0) - '0';}System.out.println(check(card));cases --;}}private static int check(Card[] card) {int i,j;boolean samecolored = true;boolean sorted = true;boolean foured = true;boolean threed = true;int doubled = 0;int kind = 1;//check colorint color = card[0].value;for(i = 0;i < CN;++ i){if(card[i].value != color){samecolored= false;break;}}//check sequenceCard temp;boolean bl = true;for(i = 1;i < CN;++ i){for(j = 0;j < CN - i;++ j){bl = true;if(card[j].point > card[j + 1].point){temp = card[j];card[j] = card[j + 1];card[j + 1] = temp;bl = false;}}if(bl){break;}}for(i = 0;i < CN - 1;++ i){if(card[i].point + 1 != card[i+ 1].point){sorted = false;break;}}//check 'A1234'if(!sorted){sorted = true;for(i = 0;i < CN - 2;++ i){if(card[i].point + 1 != card[i+ 1].point){sorted = false;break;}}if(sorted){if(card[0].point == '2' && card[4].point == ('9' + 5)){sorted = true;}else{sorted = false;}}}//kind = 1if(samecolored && sorted){return kind;}kind ++;//check four same point cardsfor(i = 0;i < CN - 2;++ i){if(card[i].point != card[i + 1].point){foured = false;break;}}if(!foured){for(i = 1;i < CN - 1;++ i){if(card[i].point != card[i + 1].point){foured = false;break;}}}//kind = 2if(foured){return kind;}kind ++;int cdlist[] = new int[13];for(i = 0;i < 13; ++ i){cdlist[i] = 0;}for(i = 0;i < CN;++ i){cdlist[card[i].point - '2'] ++;}threed = false;for(i = 0;i < 13;++ i){if(cdlist[i] == 3){threed = true;}if(cdlist[i] == 2){doubled ++;}}//kind = 3if(threed && doubled == 1){return kind;}kind ++;//kind = 4if(samecolored){return kind;}kind ++;//kind = 5if(sorted){return kind;}kind ++;//kind = 6if(threed){return kind;}kind ++;//kind = 7if(doubled == 2){return kind;}kind ++;//kind = 8if(doubled == 1){return kind;}kind ++;//kind = 9return kind;}}


 

相关推荐

最新

相关文章