【去哪儿旅行笔试题】德州扑克
题目描述
德州扑克的花型由N张扑克牌组成(N<8),可以组成的牌型按照价值从高到低来区分分别为:
- 皇家同花顺:最高为Ace(一点)的同花顺。
如:A K Q J 10的同花顺 - 同花顺:同一花色,顺序的牌。
如:K Q J 10 9的同花顺 - 四条:有四张同一点数的牌。
如:4 4 4 4 9 - 葫芦:三张同一点数的牌,加一对其他点数的牌。
如:3 3 3 10 10 - 同花:五张同一花色的牌。
如:J 10 8 7 5的全是红桃的牌 - 顺子:五张顺连的牌。
如:5 4 3 2 A的非同花牌(此牌型为最小的顺子) - 三条:仅有三张同一点数的牌,其余两张点数不同。
如:9 9 9 5 3 - 两对:两张相同点数的牌,加另外两张相同点数的牌。
如:K K 5 5 2 - 一对:仅有两张相同点数的牌。
如:10 10 9 4 2 - 高牌:不符合上面任何一种牌型的牌型,由单牌且不连续不同花的组成,以点数决定大小。
如:A 10 9 5 3的非同花的牌
这十种牌型分别输出“HuangJiaTongHuaShun”、“TongHuaShun”、“SiTiao”、“HuLu”、“TongHua”、“ShunZi”、“SanTiao”、“LiangDui”、“YiDui”、“GaoPai”。
扑克牌有4种花色,分别为(S表示黑桃,H表示红心,C表示草花,D表示方片)
本题的输入为任意小于8的N张牌,得到的结果为这些牌中排序最靠前的类型。
代码如下
import java.util.*;public class Solution {// 用于表示牌的类型权重,最大的牌型权重为10,然后依次递减static class Level {String name;int weight;Level(String n, int w) {name = n;weight = w;}}private static final int M = 5;private static final Map<String, Integer> mp = new HashMap<>();static {for (int i = 2; i <= 10; i++) {mp.put(Integer.toString(i), i);}mp.put("J", 11);mp.put("Q", 12);mp.put("K", 13);mp.put("A", 1);}/*** 翻牌** @param inHand string字符串 一组以单空格间隔的手牌(例如:SA HK H9 D8 C5 S5 H4)* @return string字符串*/public String showDown(String inHand) {String[] s = inHand.split(" ");// 求出所有5张的组合牌List<int[]> com = combinations(s.length);// 用优先级队列选出最大的类型Queue<Level> pq = new PriorityQueue<>((o1, o2) -> o2.weight - o1.weight);int[] point = new int[M];for (int[] i : com) {Set<Character> color = new HashSet<>();for (int j = 0; j < M; j++) {color.add(s[i[j]].charAt(0));point[j] = mp.get(s[i[j]].substring(1));}Arrays.sort(point);if (color.size() == 1) {tongHua(point, pq);} else {feiTongHua(point, pq);}}return pq.size() != 0 ? pq.poll().name : "";}private void tongHua(int[] point, Queue<Level> pq) {if (isShunZi(point)) {if (point[M - 1] == 13 && point[0] == 1) {pq.offer(new Level("HuangJiaTongHuaShun", 10));} else {pq.offer(new Level("TongHuaShun", 9));}} else {pq.offer(new Level("TongHua", 6));}}private void feiTongHua(int[] point, Queue<Level> pq) {if (point[0] == point[3] || point[1] == point[4]) {pq.offer(new Level("SiTiao", 8));} else if ((point[0] == point[2] && point[3] == point[4])|| (point[0] == point[1] && point[2] == point[4])) {pq.offer(new Level("HuLu", 7));} else if (point[0] == point[2] || point[1] == point[3] || point[2] == point[4]) {pq.offer(new Level("SanTiao", 4));} else {Set<Integer> ps = new HashSet<>();for (int p : point) {ps.add(p);}if (ps.size() == 3) {pq.offer(new Level("LiangDui", 3));} else if (ps.size() == 4) {pq.offer(new Level("YiDui", 2));} else {if (isShunZi(point)) {pq.offer(new Level("ShunZi", 5));} else {pq.offer(new Level("GaoPai", 1));}}}}private boolean isShunZi(int[] point) {for (int i = M - 2; i >= 1; i--) {if (point[i] != point[i + 1] - 1) {return false;}}if (point[1] == 10 && point[0] == 1) {return true;}return point[0] + 1 == point[1];}private List<int[]> combinations(int n) {List<int[]> com = new ArrayList<>();int[] in = new int[n];for (int i = 0; i < n; i++) {in[i] = i;}int[] out = new int[M];dfs(com, in, out, 0, 0);return com;}private void dfs(List<int[]> com, int[] in, int[] out, int idx, int cur) {if (idx == out.length) {int[] t = new int[out.length];System.arraycopy(out, 0, t, 0, out.length);com.add(t);return;}for (int j = cur; j < in.length; j++) {out[idx] = in[j];dfs(com, in, out, idx + 1, j + 1);}}
}
测试:
class Test {public static void main(String[] args) {Solution solution = new Solution();System.out.println("1: " + solution.showDown("SA SK SQ SJ S10 H10 C9").equals("HuangJiaTongHuaShun"));System.out.println("2: " + solution.showDown("SK SQ SJ S10 H10 C9 S9").equals("TongHuaShun"));System.out.println("3: " + solution.showDown("S3 HK H3 S7 DK D3 C3").equals("SiTiao"));System.out.println("4: " + solution.showDown("H3 D6 S3 SJ S10 H10 C3").equals("HuLu"));System.out.println("5: " + solution.showDown("S9 H7 D8 H2 H8 H9 HK").equals("TongHua"));System.out.println("6: " + solution.showDown("S3 H7 D4 S5 S7 H6 C7").equals("ShunZi"));System.out.println("7: " + solution.showDown("S3 H7 D4 S5 S7 HA C2").equals("ShunZi"));System.out.println("8: " + solution.showDown("S3 H7 DA S5 S7 H10 C7").equals("SanTiao"));System.out.println("9: " + solution.showDown("S9 HK H9 D8 C5 S5 H4").equals("LiangDui"));System.out.println("10: " + solution.showDown("S9 HK H9 D8 C10 S5 H4").equals("YiDui"));System.out.println("11: " + solution.showDown("SQ HK H9 D8 C10 S5 H4").equals("GaoPai"));}
}
【去哪儿旅行笔试题】德州扑克相关推荐
- 心血来潮之朋友的一道华为笔试题——德州扑克
一副牌中的五张扑克牌, 牌型1:同花顺:同一花色的顺子 牌型2:四条:四张相同数字+单张 牌型3:葫芦:三张相同的数字+一对 牌型4:同花:同一花色 牌型5:顺子:花色不一样的顺子 牌型6:三条:三张 ...
- 2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小
2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小. 我的大致思路是把这个整型数组转换成String数组,然后通过String类的compareTo方 ...
- 去哪儿网笔试题——取出第一个重复的字符
1 package com.shb.java; 2 /** 3 * 取出第一个重复的字符 4 * @author shaobn 5 * @date 2016-9-28 6 * @package_nam ...
- java笔试题2015_去哪儿2015笔试题JAVA实现
第一题代码: 分析:将字符数组中的每个字符串,找出其中最长的那个与字符数组中长度进行比较: a.当最长的字符串的长度大于等于字符数组的长度时,直接输出 b.当最长的字符串的长度小于字符数组的长度时,找 ...
- 2014年去哪儿网笔试题--一个10*10的矩阵(可以理解为棋盘),随时生成一组数据填入矩阵,任何一个位置的数字除4进行计算,按余数着色......
一个10*10的矩阵(可以理解为棋盘),随时生成一组数据填入矩阵,任何一个位置的数字除4进行计算,按余数着色,余数为0着色为red,1为blue,2为green,3为black,可以理解为生成4中颜色 ...
- 潇洒郎: 去哪儿2021届/2020年开发岗笔试题分享
去哪儿2021届/2020年开发岗笔试题分享 1. 2020年,直播已经成为去哪儿网酒店预售的新武器, 去哪儿网CEO刚哥想从公司的m名员工中挑选n名参与自己的直播,已知m小于100请问一共有多少种选 ...
- 2019《去哪儿》春季校招第一站(含笔试题)
PS:点进来的小伙伴,我想先声明,标题中的去哪儿指的是517Na这家公司. 离职已经过去了4天,这几天算是过上了悠闲而轻松的日子.瞌睡也睡了(忘记了早餐存在的价值),篮球也打了(下午一个人在小区里打篮 ...
- C#在类型实例化时都干了什么:从一道笔试题说开去
C#在类型实例化时都干了什么:从一道笔试题说开去 原文来自:http://www.cnblogs.com/instance/archive/2011/05/27/2059409.html 前一阵子我参 ...
- 名企笔试:网易游戏2017招聘笔试题(赶去公司)
网易游戏2017招聘笔试题(赶去公司) 题意: 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标 ...
最新文章
- Visual Studio Code打开终端控制台
- 云计算大会有感—MapReduce和UDF
- qq空间网页版电脑_常用QQ软件,电脑C盘快满了,占用太多空间,如何快速清理?...
- trie树java_【数据结构】Trie树的应用:查询IP地址的ISP(Java实现)
- 《你不知道的JavaScript》-- 精读(五)
- 微信支付api的服务器上,服务器微信支付接口笔记(与app端对接)
- 清华大学计算机系高考生源,清华大学在这个高考大省录取人数创新高,网友:仍然是同分不同命...
- (13)Zynq DDR控制器介绍
- Ext核心代码分析之Function.createDelegate
- paip.提升用户体验与安全性---注册流程总结
- python用cartopy包画地图_利用Cartopy绘制带有地图投影的图形
- android 自定义圆形进度条,Android自定义控件实现圆形进度条
- 4.5.2 Stress Testing
- 蚂蚁金服实习三面,offer已拿。我总结了所有面试题,其实也不过如此!!
- TI | TM4C123Gx单片机之---ADC笔记
- 贝叶斯推断应用:垃圾邮件过滤
- excel项目计划_使用Excel计划您的聚会座位
- 对角矩阵、对称矩阵、单位向量、正交矩阵
- oracle字符串之间,oracle中判断字符串之间包含关系
- konga--添加service和rouce详细步骤