题目描述
斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。
牌型:
单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。
例如:
3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A
可用的牌 3<4<5<6<7<8<9<10<J<Q<K<A<2<B(小王)<C(大王),每种牌除大小王外有四种花色
(共有13×4+2张牌)
输入描述
输入的第一行为当前手中的牌
输入的第二行为已经出过的牌(包括对手出的和自己出的牌)
输出描述
最长的顺子
对手可能构成的最长的顺子(如果有相同长度的顺子,输出牌面最大的那一个),
如果无法构成顺子,则输出 NO-CHAIN。
示例
示例1
输入
3-3-3-4-4-5-5-6-7-8-9-10-J-Q-K-A-A-A-A
4-5-6-7-8-8-8
输出
9-10-J-Q-K
示例2
输入
3-3-3-3-8-8-8-8
K-K-K-K
输出
NO-CHAIN
说明
剩余的牌无法构成顺子
//1、输入的牌
Scanner in = new Scanner(System.in);
String ownList = in.nextLine();
String tableList =in.nextLine();
String all = ownList+ "-"+tableList;
String[] all1 = all.split("-");
//2、 所有的牌
HashMap<String, Integer> map = new LinkedHashMap<>();
for (int i = 3; i <= 10; i++) {
map.put(i+"",4); }
map.put("J",4);
map.put("Q",4);
map.put("K",4);
map.put("A",4);
//3、剩下的牌(对方可能存在的牌)
for (int i = 0; i < all1.length; i++) {
String p= all1[i];
map.put(p,map.get(p)-1);
}
System.out.println("剩余牌==="+map);
// JQKA转换为数字,方便判断连续
ArrayList<Integer> othersList = new ArrayList<>();
for (String s : map.keySet()) {
if (map.get(s)!=0){
if(s.equals("J")){
othersList.add(11);
}else if(s.equals("Q")){
othersList.add(12);
}else if(s.equals("K")){
othersList.add(13);
}else if(s.equals("A")){
othersList.add(14);
}else {
othersList.add(Integer.parseInt(s));
}
}
}
// 4、判断剩下的牌,可以形成几个顺子,
ArrayList<ArrayList<String>> reslutList = new ArrayList<>();
//滑动窗口,5为步长
for (int i = 0; i <= othersList.size()-5; i=i+5) {
//判断连续
Boolean flag = true;
for (int j = 1; j < 5; j++) {
if (othersList.get(i+j) != othersList.get(i+j - 1)+1 ){
flag = false;
}
}
// 如果 TRUE ,则可以形成顺子
ArrayList<String> sunList = new ArrayList<>();
if (flag){
for (int j = 0; j < 5; j++) {
System.out.print(othersList.get(i+j));
String pai = othersList.get(i+j)+"";
if(pai.equals("11")){
sunList.add("J");
}else if(pai.equals("12")){
sunList.add("Q");
}else if(pai.equals("13")){
sunList.add("K");
}else if(pai.equals("14")){
sunList.add("A");
}else {
sunList.add(pai);
}
}
reslutList.add(sunList);
System.out.println("============");
}
}
System.out.println(reslutList);
// 5、找到最大顺子
if (reslutList.size()!=0){
ArrayList<String> temp = new ArrayList<>();
temp.add("0");
for (List<String> value : reslutList ) {
if (Integer.valueOf(value.get(0))>Integer.valueOf(temp.get(0))){
temp= (ArrayList<String>) value;
}
}
for (String s : temp) {
System.out.print(s);
}
}else {
System.out.println("NO-CHAIN");
}