Java程序练习-A-黑帝君临

描述

Description

西斯皇帝欺骗了议员,控制了议会。绝地武士传人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散牌 单一型态的五张散牌所组成,不成对(二对),不成三条,不成顺(同花顺),不成同花,不成葫芦,不成铁支。先比最大一张牌的大小,如果大小一样,比这张牌的花色。

输入

Input

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

输出

Output

每组数据,请输出牌型所对应的编号。

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

参考代码

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 color int color = card[0].value; for(i = 0;i < CN;++ i){ if(card[i].value != color){ samecolored= false; break; } } //check sequence Card 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 = 1 if(samecolored && sorted){ return kind; } kind ++; //check four same point cards for(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 = 2 if(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 = 3 if(threed && doubled == 1){ return kind; } kind ++; //kind = 4 if(samecolored){ return kind; } kind ++; //kind = 5 if(sorted){ return kind; } kind ++; //kind = 6 if(threed){ return kind; } kind ++; //kind = 7 if(doubled == 2){ return kind; } kind ++; //kind = 8 if(doubled == 1){ return kind; } kind ++; //kind = 9 return kind; } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值