[德州扑克]

德州扑克

真题目录: 点击去查看

E 卷 100分题型

题目描述

五张牌,每张牌由牌大小和花色组成,牌大小2~10、J、Q、K、A,牌花色为红桃、黑桃、梅花、方块四种花色之一。

判断牌型:

牌型1,同花顺:同一花色的顺子,如红桃2红桃3红桃4红桃5红桃6。
牌型2,四条:四张相同数字 + 单张,如红桃A黑桃A梅花A方块A + 黑桃K。
牌型3,葫芦:三张相同数字 + 一对,如红桃5黑桃5梅花5 + 方块9梅花9。
牌型4,同花:同一花色,如方块3方块7方块10方块J方块Q。
牌型5,顺子:花色不一样的顺子,如红桃2黑桃3红桃4红桃5方块6。
牌型6,三条:三张相同+两张单。

说明:

(1)五张牌里不会出现牌大小和花色完全相同的牌。
(2)编号小的牌型较大,如同花顺比四条大,依次类推。
(3)包含A的合法的顺子只有10 J Q K A和A 2 3 4 5;类似K A 2 3 4的序列不认为是顺子。

输入描述

输入由5行组成,每行为一张牌大小和花色,牌大小为2~10、J、Q、K、A,花色分别用字符H、S、C、D表示红桃、黑桃、梅花、方块。

输出描述

输出牌型序号,5张牌符合多种牌型时,取最大的牌型序号输出。

用例1

输入

4 H
5 S
6 C
7 D
8 D

输出

5

说明

4 5 6 7 8构成顺子,输出5

用例2

输入

9 S
5 S
6 S
7 S
8 S

输出

1

说明

既是顺子又是同花,输出1,同花顺

题解

思路:

  1. 模拟方法去处理
  2. 主要需要考虑奇数和偶数的情况就行

c++

#include<iostream>
#include<vector>
#include<string>
#include <utility> 
#include <sstream>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
// 牌面值映射
map<string, int> mp = {{"2", 2},{"3", 3},{"4", 4},{"5", 5},{"6", 6},{"7", 7},{"8", 8},{"9", 9},{"10", 10},{"J", 11},{"Q", 12},{"K", 13},{"A", 14},
};
// 花色映射
map<string, int> colorMap = {{"H", 0},{"S", 1},{"C", 2},{"D", 3},
};// 判断是否为顺子bool isShunzi(vector<int> nums) {string tmp = "";for (int i = 0; i < nums.size(); i++) {tmp +=  nums[i];}// 特殊处理if (tmp == "142345") {return true;}for (int i = 1; i < nums.size(); i++) {if (nums[i] != nums[i-1] + 1 ) {return false;;}}return true;
}
// 统计出现字符个数及对应个数map<int, int> countNum(vector<int> nums) {map<int, int> numMapping;for (int i = 0; i < nums.size(); i++) {numMapping[nums[i]]++;}return numMapping;
}int main() {vector<int> nums(5), colors(5);for (int i  = 0; i < 5; i++) {string value, color; cin >> value >> color;nums[i] = mp[value];colors[i] = colorMap[color];}// 排序便于判断顺子sort(nums.begin(), nums.end());bool isShun = isShunzi(nums);map<int, int> colorsCount = countNum(colors);map<int, int> numsCount = countNum(nums);// 分类判断if (isShun && colorsCount.size() == 1) {cout << 1;} else if (numsCount.size() ==2 && ((*numsCount.begin()).second == 4 || (*numsCount.begin()).second == 1)) {cout << 2;} else if (numsCount.size() ==2 && ((*numsCount.begin()).second == 3 || (*numsCount.begin()).second == 2)) {cout << 3;} else if (colorsCount.size() == 1) {cout << 4;}else if (isShun) {cout << 5;} else if (numsCount.size() == 3){bool flag = true;for (auto item : numsCount) {// cout << item.second;if (item.second != 1 && item.second != 3) {flag = false;break;}}if (flag) {cout << 6;}}return 0;
}

JAVA

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] nums = new String[5];String[] colors = new String[5];for (int i = 0; i < 5; i++) {nums[i] = sc.next();colors[i] = sc.next();}System.out.println(getResult(nums, colors));}public static int getResult(String[] nums, String[] colors) {Arrays.sort(nums, (a, b) -> cards(a) - cards(b));if (isShunzi(nums) && isTonghua(colors)) return 1;else if (isSitiao(nums)) return 2;else if (isHulu(nums)) return 3;else if (isTonghua(colors)) return 4;else if (isShunzi(nums)) return 5;else if (isSantiao(nums)) return 6;else return 0;}// 牌大小 映射为 数值public static int cards(String num) {switch (num) {case "J":return 11;case "Q":return 12;case "K":return 13;case "A":return 14;default:return Integer.parseInt(num);}}// 顺子public static boolean isShunzi(String[] nums) {if ("2345A".equals(String.join("", nums))) return true;for (int i = 1; i < nums.length; i++) {int num1 = cards(nums[i - 1]);int num2 = cards(nums[i]);if (num1 + 1 != num2) return false;}return true;}// 同花public static boolean isTonghua(String[] colors) {// 同花牌的所有花色都一样return new HashSet<String>(Arrays.asList(colors)).size() == 1;}// 四条public static boolean isSitiao(String[] nums) {// 四条由两部分组成,一个部分四张相同牌,一个部分一张牌return countNums(nums, 2, 4);}// 葫芦public static boolean isHulu(String[] nums) {// 葫芦由两部分组成,一个部分三张牌相同,一个部分两张牌相同return countNums(nums, 2, 3);}// 三条public static boolean isSantiao(String[] nums) {// 三条由三部分组成,第一个部分由三张相同牌组成,第二个,第三个部分分别是两种不同的牌return countNums(nums, 3, 3);}private static boolean countNums(String[] nums, int partCount, int maxSameNumCount) {HashMap<String, Integer> count = new HashMap<>();for (String num : nums) {count.put(num, count.getOrDefault(num, 0) + 1);}if (count.keySet().size() != partCount) return false;return count.containsValue(maxSameNumCount);}
}

Python

# 输入获取
arr = [input().split() for _ in range(5)]# 牌大小 映射为 数值
def cards(num):if num == "J":return 11elif num == "Q":return 12elif num == "K":return 13elif num == "A":return 14else:return int(num)def countNums(nums, partCount, maxSameNumCount):count = {}for num in nums:if count.get(num) is None:count[num] = 0count[num] += 1if len(count.keys()) != partCount:return Falsereturn maxSameNumCount in count.values()# 三条
def isSantiao(nums):# 三条由三部分组成,第一个部分由三张相同牌组成,第二个,第三个部分分别是两种不同的牌return countNums(nums, 3, 3)# 葫芦
def isHulu(nums):# 葫芦由两部分组成,一个部分三张牌相同,一个部分两张牌相同return countNums(nums, 2, 3)# 四条
def isSitiao(nums):# 四条由两部分组成,一个部分四张相同牌,一个部分一张牌return countNums(nums, 2, 4)# 同花
def isTonghua(colors):# 同花牌的所有花色都一样return len(set(colors)) == 1# 顺子
def isShunzi(nums):if "".join(nums) == "2345A":return Truefor i in range(1, len(nums)):if cards(nums[i - 1]) + 1 != cards(nums[i]):return Falsereturn True
# 算法入口
def getResult():nums = []colors = []for num, color in arr:nums.append(num)colors.append(color)nums.sort(key=lambda x: cards(x))if isShunzi(nums) and isTonghua(colors):return 1elif isSitiao(nums):return 2elif isHulu(nums):return 3elif isTonghua(colors):return 4elif isShunzi(nums):return 5elif isSantiao(nums):return 6else:return 0# 算法调用
print(getResult())

JavaScript

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});const lines = [];
rl.on("line", (line) => {lines.push(line);if (lines.length === 5) {const arr = lines.map((line) => line.split(" "));console.log(getResult(arr));lines.length = 0;}
});function getResult(arr) {const nums = [];const colors = [];for (let [num, color] of arr) {nums.push(num);colors.push(color);}nums.sort((a, b) => cards(a) - cards(b));if (isShunzi(nums) && isTonghua(colors)) return 1;else if (isSitiao(nums)) return 2;else if (isHulu(nums)) return 3;else if (isTonghua(colors)) return 4;else if (isShunzi(nums)) return 5;else if (isSantiao(nums)) return 6;else return 0;
}function cards(num) {switch (num) {case "J":return 11;case "Q":return 12;case "K":return 13;case "A":return 14;default:return parseInt(num);}
}// 顺子
function isShunzi(nums) {if (nums.join("") === "2345A") return true;for (let i = 1; i < nums.length; i++) {const num1 = cards(nums[i - 1]);const num2 = cards(nums[i]);if (num1 + 1 !== num2) return false;}return true;
}// 同花
function isTonghua(colors) {// 同花牌的所有花色都一样return new Set(colors).size === 1;
}// 四条
function isSitiao(nums) {// 四条由两部分组成,一个部分四张相同牌,一个部分一张牌return countNums(nums, 2, 4);
}// 葫芦
function isHulu(nums) {// 葫芦由两部分组成,一个部分三张牌相同,一个部分两张牌相同return countNums(nums, 2, 3);
}// 三条
function isSantiao(nums) {// 三条由三部分组成,第一个部分由三张相同牌组成,第二个,第三个部分分别是两种不同的牌return countNums(nums, 3, 3);
}function countNums(nums, partCount, maxSameNumCount) {const count = {};for (let num of nums) {count[num] = (count[num] ?? 0) + 1;}if (Object.keys(count).size != partCount) return false;return Object.values(count).includes(maxSameNumCount);
}

Go

package mainimport ("bufio""fmt""os""sort""strings"
)
// 牌面值映射
var valueMap = map[string]int{"2":  2,"3":  3,"4":  4,"5":  5,"6":  6,"7":  7,"8":  8,"9":  9,"10": 10,"J":  11,"Q":  12,"K":  13,"A":  14,
}
// 花色映射
var colorMap = map[string]int{"H": 0,"S": 1,"C": 2,"D": 3,
}// 判断是否为顺子
func isShunzi(nums []int) bool {tmp := ""for _, num := range nums {tmp += fmt.Sprintf("%d", num)}// 特殊处理if tmp == "142345" {return true}for i := 1; i < len(nums); i++ {if nums[i] != nums[i-1]+1 {return false}}return true
}
// 统计出现字符个数及对应个数
func countNum(nums []int) map[int]int {count := make(map[int]int)for _, num := range nums {count[num]++}return count
}func main() {reader := bufio.NewReader(os.Stdin)nums := make([]int, 5)colors := make([]int, 5)for i := 0; i < 5; i++ {line, _ := reader.ReadString('\n')line = strings.TrimSpace(line)parts := split(line, " ")value, color := parts[0], parts[1]nums[i] = valueMap[value]colors[i] = colorMap[color]}
// 排序便于判断顺子sort.Ints(nums)isShun := isShunzi(nums)colorsCount := countNum(colors)numsCount := countNum(nums)// 分类判断if isShun && len(colorsCount) == 1 {fmt.Println(1)} else if len(numsCount) == 2 {first := -1for _, v := range numsCount {first = vbreak}if first == 4 || first == 1 {fmt.Println(2)} else if first == 3 || first == 2 {fmt.Println(3)}} else if len(colorsCount) == 1 {fmt.Println(4)} else if isShun {fmt.Println(5)} else if len(numsCount) == 3 {flag := truefor _, count := range numsCount {if count != 1 && count != 3 {flag = falsebreak}}if flag {fmt.Println(6)}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5143.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-核函数(Kernel Function)

核函数&#xff08;Kernel Function&#xff09;是一种数学函数&#xff0c;主要用于将数据映射到一个更高维的特征空间&#xff0c;以便于在这个新特征空间中更容易找到数据的结构或模式。核函数的主要作用是在不需要显式计算高维特征空间的情况下&#xff0c;通过内积操作来实…

AQS公平锁与非公平锁之源码解析

AQS加锁逻辑 ReentrantLock.lock public void lock() {sync.acquire(1);}AbstractQueuedSynchronizer#acquire public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}addWaiter就是将节点加入…

软件授权产品介绍

CodeMeter技术可提供高达40亿个授权模块&#xff0c;其中6000个可存放于硬件加密狗CmDongle中&#xff0c;其他可存放于软授权CmActLicense中按需激活&#xff0c;CodeMeter云授权CmCloud也可以无任何限制的为“云中软件”提供灵活的授权控制。 CodeMeter安全时钟模块采用了独…

Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)

本文讲如何计算倒计时&#xff0c;并添加该倒计时的数据条。 1&#xff0c;如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格&#xff0c;选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…

Vue3初学之Element Plus Dialog对话框,Message组件,MessageBox组件

Dialog的使用&#xff1a; 控制弹窗的显示和隐藏 <template><div><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible"title"提示"width"30%":before-close&qu…

C++ 类与对象(上)

在C中&#xff0c;在原来C语言基础上引入了类的概念。与C语言最大的不同就是&#xff1a;C可以在类中定义函数。由类声明的变量&#xff0c;称为对象。 1.类的定义 1.1类定义的格式 class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;…

什么样的问题适合用递归

递归是一种通过函数调用自身来解决问题的方法。递归适用于那些可以被分解为相似子问题的问题&#xff0c;即原问题可以通过解决一个或多个更小规模的同类问题来解决。递归通常需要满足以下两个条件&#xff1a; 递归基&#xff08;Base Case&#xff09;&#xff1a;问题的最简…

Qt基础项目篇——Qt版Word字处理软件

一、核心功能 本软件为多文档型程序&#xff0c;界面是标准的 Windows 主从窗口 拥有&#xff1a;主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西&#xff0c;均在下图了。 开发该软件&#xff0c;主要分为下面三个阶段 1&#xff09;界面设计开发 多窗口 MDI 程序…

【物联网】keil仿真环境设置 keilV5可以适用ARM7

文章目录 一、ARM指令模拟器环境搭建1. keil软件2. Legacy Support 二、Keil仿真环境设置1. 创建一个项目2. 编译器介绍(1)arm-none-eabi-gcc(2)arm-none-linux-gnueabi-gcc(3)arm-eabi-gcc(4)grmcc(5)aarch64-linux-gnu-gcc 3. 安装编译器(1)设置调试 一、ARM指令模拟器环境搭…

StackOrQueueOJ3:用栈实现队列

目录 题目描述思路分析开辟队列入队列出队列 代码展示 题目描述 原题&#xff1a;232. 用栈实现队列 思路分析 有了前面的用队列实现栈的基础我们不难想到这题的基本思路&#xff0c;也就是用两个栈来实现队列&#xff0c;&#xff08;栈的实现具体参考&#xff1a;栈及其接口…

二叉树--堆排序

我们之前学过冒泡排序算法&#xff0c;还有其他的排序算法之类的&#xff0c;我们今天来讲堆排序算法&#xff1b; 假设我们现在有一个数组&#xff0c;我们想要对其进行排序&#xff0c;我们可以使用冒泡排序来进行排序&#xff1b;我们也可以使用堆排序来进行排序&#xff1b…

简述mysql 主从复制原理及其工作过程,配置一主两从并验证

第一种基于binlog的主从同步 首先对主库进行配置&#xff1a; [rootopenEuler-1 ~]# vim /etc/my.cnf 启动服务 [rootopenEuler-1 ~]# systemctl enable --now mysqld 主库的配置 从库的配置 第一个从库 [rootopenEuler-1 ~]# vim /etc/my.cnf [rootopenEuler-1 ~]# sys…

【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作

目录 1.今年的创作路线 2.先说第一条线 2.1.由日志引出的海量文本数据存储和分析问题 2.2.监控以及监控的可视化 2.3.数据量级再往上走牵扯出了大数据 2.4.由大数据牵扯出的JAVA线程高级内容 3.第二条线&#xff0c;也是2025要继续的主线 1.今年的创作路线 今年的写作内…

用于牙科的多任务视频增强

Multi-task Video Enhancement for Dental Interventions 2022 miccai Abstract 微型照相机牢牢地固定在牙科手机上&#xff0c;这样牙医就可以持续地监测保守牙科手术的进展情况。但视频辅助牙科干预中的视频增强减轻了低光、噪音、模糊和相机握手等降低视觉舒适度的问题。…

Hnu电子电路实验2

目录 【说明】 与本次实验相关的代码及报告等文件见以下链接&#xff1a; 一、实验目的 二、实验内容 三&#xff1a;实验原理 1.指令译码器 2.AU 算术单元 四&#xff1a;实验过程 1.指令译码器 A&#xff09;创建工程&#xff08;选择的芯片为 familyCyclone II&am…

C语言之图像文件的属性

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…

AI 新动态:技术突破与应用拓展

目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最具影响力的领域之一。AI 技…

ElasticSearch DSL查询之排序和分页

一、排序功能 1. 默认排序 在 Elasticsearch 中&#xff0c;默认情况下&#xff0c;查询结果是根据 相关度 评分&#xff08;score&#xff09;进行排序的。我们之前已经了解过&#xff0c;相关度评分是通过 Elasticsearch 根据查询条件与文档内容的匹配程度自动计算得出的。…

【NLP基础】Word2Vec 中 CBOW 指什么?

【NLP基础】Word2Vec 中 CBOW 指什么&#xff1f; 重要性&#xff1a;★★ CBOW 模型是根据上下文预测目标词的神经网络&#xff08;“目标词”是指中间的单词&#xff0c;它周围的单词是“上下文”&#xff09;。通过训练这个 CBOW 模型&#xff0c;使其能尽可能地进行正确的…

资料03:【TODOS案例】微信小程序开发bilibili

样式 抽象数据类型 页面数据绑定 事件传参