当前位置: 首页 > article >正文

算法 求最大葫芦数

问题描述

德州扑克是一种经典的扑克游戏,里面有一种牌型叫“葫芦”。
“葫芦”由五张牌组成,其中包含三张一样的牌a和另外两张一样的牌b。
“葫芦”跟“葫芦”之间可以比较大小,先比较a的大小,如果a一样大再比较b的大小。
德州扑克不包含大小王,只包含常规的52张牌。在13种不同的牌面里面,大小规则是A > K > Q > J > 10 > 9 > … > 2。也就是说,A最大,K次之,2最小。
这里给“葫芦”加一个限制规则,“葫芦”的牌面值之和不能超过max(可以等于),A,2,3,…,J,Q,K的牌面值分别是1到13。

问题

给出n张牌,从里面寻找符合规则的最大葫芦组合

输入格式

第一行输入两个整数,代表牌的数量n和牌面值之和的限制max
第二行输入n个整数,代表n张牌的牌面,其中数字1代表牌面A,数字2到10分别代表牌面2到10,11代表牌面J,12代表牌面Q,13代码牌面K。

输出格式

最大的葫芦组合里面,三张的牌面和两张的牌面,如果没有葫芦则输出“0,0”

输入样式

样例1

9 34
6 6 6 8 8 8 5 5 1

样例2

9 37
9 9 9 9 6 6 6 6 13

样例3

9 40
1 11 13 12 7 8 11 5 6

输出样式

样例1

8 6

样例2

9 6

样例3

0 0

数据范围

牌数n的范围:5 < n < 40,0 < max < 100
牌面的范围:1 ≤ v ≤ 13
跟现实中扑克一样,每种牌面最多4张

答案

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

public class Main {
    public static int[] solution(int n, int max, int[] array) {
        // Edit your code here
        HashMap<Integer, Integer> checkMap = new HashMap<>();
        for(Integer i : array){
            if (!checkMap.containsKey(i)){
                checkMap.put(i,1);
            }else {
                int a = checkMap.get(i);
                checkMap.put(i,a+1);
            }
        }

        ArrayList<Integer> ThreeList = new ArrayList<>();
        ArrayList<Integer> TwoList = new ArrayList<>();

        checkMap.forEach((key,value)->{
            if (value==3){
                ThreeList.add(key);
                TwoList.add(key);
            }
            if (value==2){
                TwoList.add(key);
            }
            if (value==4){
                ThreeList.add(key);
                TwoList.add(key);
            }
        });

        Collections.sort(ThreeList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return 01-o2;
            }
        });
        Collections.sort(TwoList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return 01 - o2;
            }
        });
        if (ThreeList.size() == 0){
            return new int[]{0, 0};
        }

        int threeRes = ThreeList.get(0);
        int index = 0;
        for (int i = 0; i < TwoList.size(); i++) {
            if (threeRes == TwoList.get(i)){
                index = i;
            }
        }
        int twoRes = TwoList.get(index+1);



        return new int[]{threeRes, twoRes};
    }

    public static void main(String[] args) {
        // Add your test cases here

        System.out.println(java.util.Arrays.equals(solution(9, 34, new int[]{6, 6, 6, 8, 8, 8, 5, 5, 1}), new int[]{8, 6}));
        System.out.println(java.util.Arrays.equals(solution(9, 37, new int[]{9, 9, 9, 9, 6, 6, 6, 6, 13}), new int[]{9,6}));
        System.out.println(java.util.Arrays.equals(solution(9, 40, new int[]{1, 11, 13, 12, 7, 8, 11, 5, 6}), new int[]{0, 0}));
    }
}


http://www.kler.cn/a/324767.html

相关文章:

  • 游戏引擎学习第八天
  • 狼蛛F87Pro键盘常用快捷键的使用说明
  • 【Linux:IO多路复用(select、poll函数)
  • 将已有的MySQL8.0单机架构变成主从复制架构
  • ServletConfig、ServletContext、HttpServletRequest与HttpServletResponse常见API
  • 一文说清C++类型转换操作符(cast operator)
  • 如何选择合适的跨境网络专线?
  • 加速 Python for 循环
  • Unity开发绘画板——02.创建项目
  • TTPoE的设计,quic协议,KCP传输协议,快速可靠的UDP
  • 另外知识与网络总结
  • AndroidManifest.xml 文件中的 package 属性不再是强制要求定义
  • 使用6条命令完成Windows和H3C VSR的IPsec对接
  • 我想自己做一个漫画网站,我需要多大的服务器
  • cocos资源分包
  • CSS 的pointer-events属性,控制元素如何响应用户指针事件
  • 怎么给邮件加密?对邮件加密的五个绝佳方法,亲测有效!保教包会哦!
  • JIT- 栈上替换(On-Stack Replacement, OSR)
  • c++入门 类和对象(中)
  • ELK-05-skywalking监控SpringCloud服务日志
  • Java 图片合成
  • 【CKA】二、节点管理-设置节点不可用
  • UDP与TCP那个传输更快
  • 【高阶数据结构】平衡二叉树(AVL)的插入(4种旋转方法+精美图解+完整代码)
  • 深度解析:Debian 与 Ubuntu 常用命令的区别与联系
  • Electron 安装以及搭建一个工程