信息学奥赛一本通 2111 【24CSPJ普及组】扑克牌(poker) | 洛谷 P11227 [CSP-J 2024] 扑克牌

【题目链接】

ybt 2111 【24CSPJ普及组】扑克牌(poker)
洛谷 P11227 [CSP-J 2024] 扑克牌

【题目考点】

1. 散列存储
2. 顺序查找
3. C++ STL set/map

【解题思路】

解法1:散列存储

设数组card[4][15]card[i][j]表示花色编号为i数字为j的牌有几张。
将每种花色与数字对应,每种编号对应的花色为:0:方片 1:草花 2:红桃 3:黑桃
每次循环读入两个字符

  1. 将第1个表示花色的字符转为花色编号t:D代表方片转为0,C代表草花转为1,H代表红桃转为2,S代表黑桃转为3。
  2. 将第2个表示数字的字符转为数字d:T转为10,J转为11,Q转为12,K转为13,A转为1。
  3. 花色编号t数字为d的牌的数量增加1,也就是card[t][d]增加1。

最后遍历card数组,花色编号t从0到3循环,数值d从1到13循环,看一下哪一张牌的数量为0,就需要向他人借这一张牌,变量ans统计借牌的数量,最后输出ans。

也可以将字符转为数字的关系存储在一个map中,可以将表示花色、数字的字符通过map转为对应的数字编号。

解法2:查找牌是否已存在

输入已有的牌,将每个表示牌的字符串存入一个数组。
而后枚举所有可能的牌,对于每个牌,在数组中查找是否已存在该牌,如果不存在,则需要借一张牌。统计借牌数量。
保存牌的数据结构可以是顺序表(数组),也可以是set或map。

解法3:统计已有牌的种类

由于set(或map)有去重功能,已有的不同的牌的种类,52减去已有牌的种类,得到的就是需要借牌的数量。

【题解代码】

解法1:散列存储

  • 写法1:使用if…else判断
#include<bits/stdc++.h>
using namespace std;
int n, t, d, ans, card[4][15];//card[i][j]:花色为i数字为j的牌有几张 花色编号:0:方块 1:草花 2:红桃 3:黑桃 
int main()
{string s;cin >> n;for(int i = 1; i <= n; ++i){cin >> s;if(s[0] == 'D')//方块 t = 0;else if(s[0] == 'C')//草花 t = 1;			else if(s[0] == 'H')//红桃t = 2;else//黑桃t = 3;if(s[1] == 'T')d = 10;else if(s[1] == 'J')d = 11;else if(s[1] == 'Q')d = 12;else if(s[1] == 'K')d = 13;else if(s[1] == 'A')d = 1;elsed = s[1]-'0';card[t][d]++;//花色t,数字d的牌的数量增加1 }for(int i = 0; i < 4; ++i)for(int j = 1; j <= 13; ++j)if(card[i][j] == 0)ans++;cout << ans;return 0;
}
  • 写法2:使用map存储字符对应的数字
#include<bits/stdc++.h>
using namespace std;
int n, t, d, ans, card[4][15];//card[i][j]:花色为i数字为j的牌有几张 花色编号:0:方块 1:草花 2:红桃 3:黑桃 
map<char, int> mp = {{'D',0},{'C',1},{'H',2},{'S',3},{'T',10},{'J',11},{'Q',12},{'K',13},{'A',1},{'2',2},{'3',3},{'4',4},{'5',5},{'6',6},{'7',7},{'8',8},{'9',9}}; 
int main()
{char t, d;cin >> n;for(int i = 1; i <= n; ++i){cin >> t >> d;//字符t表示花色 字符d表示数字 card[mp[t]][mp[d]]++;//花色mp[t],数字mp[d]的牌的数量增加1 }for(int i = 0; i < 4; ++i)for(int j = 1; j <= 13; ++j)if(card[i][j] == 0)ans++;cout << ans;return 0;
}

解法2:查找牌是否已存在

  • 写法1:使用数组保存,顺序查找
#include<bits/stdc++.h>
using namespace std;
int n, ans;
string s[105];
char col[4] = {'D','C','H','S'}, num[15] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
bool find(string t)//s[0]~s[n-1]是否存在t 
{for(int i = 0; i < n; ++i) if(s[i] == t)return true;return false;
}
int main()
{cin >> n;for(int i = 0; i < n; ++i)cin >> s[i];for(int i = 0; i < 4; ++i)for(int j = 0; j < 13; ++j)if(!find(string{col[i],num[j]}))//col[i]和num[j]连接成字符串 ans++;cout << ans;return 0;
}
  • 写法2:使用set保存
#include<bits/stdc++.h>
using namespace std;
int n, ans;
set<string> st; 
char col[4] = {'D','C','H','S'}, num[15] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
int main()
{string s;cin >> n;for(int i = 0; i < n; ++i){cin >> s;st.insert(s);}for(int i = 0; i < 4; ++i)for(int j = 0; j < 13; ++j)if(st.count(string{col[i],num[j]}) == 0)//col[i]和num[j]连接成字符串 ans++;cout << ans;return 0;
}
解法3:统计已有牌的种类
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;set<string> st; string s;cin >> n;for(int i = 0; i < n; ++i){cin >> s;st.insert(s);}cout << 52-st.size();//st.size()是已有牌的种类,52减去后剩下的就是需要借牌的数量 return 0;
}

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

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

相关文章

优化代码性能:利用CPU缓存原理

在计算机的世界里&#xff0c;有一场如同龟兔赛跑般的速度较量&#xff0c;主角便是 CPU 和内存 。龟兔赛跑的故事大家都耳熟能详&#xff0c;兔子速度飞快&#xff0c;乌龟则慢吞吞的。在计算机中&#xff0c;CPU 就如同那敏捷的兔子&#xff0c;拥有超高的运算速度&#xff0…

oracle:索引(B树索引,位图索引,分区索引,主键索引,唯一索引,联合索引/组合索引,函数索引)

索引通过存储列的排序值来加快对表中数据的访问速度&#xff0c;帮助数据库系统快速定位到所需数据&#xff0c;避免全表扫描 B树索引(B-Tree Index) B树索引是一种平衡树结构&#xff0c;适合处理范围查询和精确查找。它的设计目标是保持数据有序&#xff0c;并支持高效的插入…

【DeepSeek背后的技术】系列一:混合专家模型(MoE)

目录 1 概述2 稀疏性3 微调3.1 令牌的负载均衡3.2 使用HuggingFace微调MoE模型3.3 专家如何学习3.4 专家的数量3.5 微调 4 提速4.1 并行计算4.2 容量因子和通信开销4.3 部署技术4.4 高效训练 5 MoE和稠密模型对比6 为什么是替换FFN层6.1 FFN层的角色与特性6.2 MoE的优势与FFN的…

AI技术在SEO关键词优化中的应用策略与前景展望

内容概要 在数字营销的快速发展中&#xff0c;AI技术逐渐成为SEO领域的核心驱动力。其通过强大的数据分析和处理能力&#xff0c;不仅改变了我们优化关键词的方式&#xff0c;也提升了搜索引擎优化的效率和效果。在传统SEO中&#xff0c;关键词的选择与组合常依赖人工经验和直…

!力扣 84. 柱状图中最大矩形

给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&#xff1a;最大的矩形为…

ieee模版如何修改参考文献的格式以及多作者省略等

在用latex写论文的时候&#xff0c;会遇到各种模板&#xff0c;如果你要投IEEE的期刊或者会议&#xff0c;就得使用相应的latex模板。对于参考文献很多模版不一样的有些使用文本导入 有些使用的是bib 格式&#xff0c;因此记录一下如何修改IEEE参考文献的格式已经对应的多作者进…

【产品经理学习案例——AI翻译棒出海业务】

前言&#xff1a; 本文主要讲述了硬件产品在出海过程中&#xff0c;翻译质量、翻译速度和本地化落地策略是硬件产品规划需要考虑的核心因素。针对不同国家&#xff0c;需要优化翻译质量和算法&#xff0c;关注市场需求和文化差异&#xff0c;以便更好地满足当地用户的需求。同…

Jenkins 触发构建的几种常见方式

为了实现自动化构建,Jenkins 提供了多种触发构建的方式。这些触发方式可以根据开发团队的需求来选择,使得构建过程更加灵活和高效。 1. 手动触发构建 手动触发构建是最简单的一种方式,通常用于开发人员或管理员手动启动构建任务。 步骤: 登录 Jenkins 后,进入某个项目(…

全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(一)

目录 cors解决跨域 依赖注入使用 分层服务注册 缓存方法使用 内存缓存使用 缓存过期清理 缓存存在问题 分布式的缓存 cors解决跨域 前后端分离已经成为一种越来越流行的架构模式&#xff0c;由于跨域资源共享(cors)是浏览器的一种安全机制&#xff0c;它会阻止前端应用…

Python写一个爱心

项目代码&#xff1a; import random from math import sin, cos, pi, log from tkinter import *# 定义窗口的大小 CANVAS_WIDTH 640 CANVAS_HEIGHT 480 CANVAS_CENTER_X CANVAS_WIDTH / 2 CANVAS_CENTER_Y CANVAS_HEIGHT / 2 IMAGE_ENLARGE 11 # 定义爱心的颜色 HEART_…

leetcode——二叉树的最近公共祖先(java)

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己的…

Android学习制作app(ESP8266-01S连接-简单制作)

一、理论 部分理论见arduino学习-CSDN博客和Android Studio安装配置_android studio gradle 配置-CSDN博客 以下直接上代码和效果视频&#xff0c;esp01S的收发硬件代码目前没有分享&#xff0c;但是可以通过另一个手机网络调试助手进行模拟。也可以直接根据我的代码进行改动…

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪 2025/2/2 21:25 声卡&#xff1a;笔记本电脑的摄像头自带的【USB接口的】麦克风。没有外接3.5mm接口的耳机。 缘起&#xff1a;在安装Ubuntu18.04/20.04系统的笔记本电脑中直接使用Guvcview录像的时候底噪很大&#xff01; …

MySQL子查询

一、子查询的概述 1、理解&#xff1a;可以理解为嵌套查询&#xff0c;查询的内部进行查询 2、称谓规范&#xff1a;外查询&#xff08;主查询&#xff09;、内查询&#xff08;子查询&#xff09;&#xff0c;这种称呼是相对的。 子查询&#xff08;内查询&#xff09;在主查…

MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)

使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入&#xff1a; 这样 role “read_only_role" 就获得了3个 action&#xff0c; 分别是 查询&#xff0c;列举集合&#xff0c;集合元数据查询 P.S: 如果没有 …

结构体DMA串口接收比特错位

发送&#xff1a; 显示&#xff1a; uint16_t接收时候会比特错位。

经典本地影音播放器MPC-BE.

经典本地影音播放器MPC-BE 链接&#xff1a;https://pan.xunlei.com/s/VOIAZbbIuBM1haFdMYCubsU-A1?pwd4iz3# MPC-BE&#xff08;Media Player Classic Black Edition&#xff09;是来自 MPC-HC&#xff08;Media Player Classic Home Cinema&#xff09;的俄罗斯开发者重新…

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

【1】引言 前序学习进程中&#xff0c;对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像&#xff0c;每个像素点上的BGR值为三个整数&#xff0c;因为是三通道图像&#xff1b;对于灰度图像&#xff0c;各个像素上的BGR值是一个整数&#xff0c;因为这是单通…

【开源免费】基于Vue和SpringBoot的工作流程管理系统(附论文)

本文项目编号 T 193 &#xff0c;文末自助获取源码 \color{red}{T193&#xff0c;文末自助获取源码} T193&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

IntelliJ IDEA远程开发代理远程服务器端口(免费内网穿透)

IntelliJ IDEA远程开发代理远程服务器端口&#xff08;免费内网穿透&#xff09;&#xff08;JetBrains家的其他IDE应该也支持&#xff09; 之前看到宇宙第一IDE VS Code好像默认代理了远程的端口&#xff0c;但是一直没找到IDEA的同类功能&#xff0c;这次终于发现了 以Intell…