最长的顺子

题目描述
斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。

牌型
单顺,又称顺子,最少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");
 }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值