C++扑克牌(poker)2024年CSP-J认证第二轮第一题 CCF信息学奥赛C++ 中小学初级组 第二轮真题解析

news2024/11/22 13:22:50

目录

C++扑克牌(poker)

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、运行结果

五、考点分析

六、推荐资料


C++扑克牌(poker)

2024年CSP-J认证第二轮第一题

一、题目要求

1、编程实现

        小 P 从同学小 Q 那儿借来一副 n 张牌的扑克牌。本题中我们不考虑大小王,此时每张牌具有两个属性:花色和点数。花色共有4种:方片、草花、红桃和黑桃。点数共有13 种,从小到大分别为A23456789TJ Q K。注意:点数 10 在本题中记为 T。
        我们称一副扑克牌是完整的,当且仅当对于每一种花色和每一种点数,都恰好有一张牌具有对应的花色和点数。由此,一副完整的扑克牌恰好有4x13=52 张牌。以下图片展示了一副完整的扑克牌里所有的 52 张牌。

        小 P借来的牌可能不是完整的,为此小P准备再向同学小S借若干张牌。可以认为小S每种牌都有无限张,因此小P可以任意选择借来的牌。小 P想知道他至少得向小S借多少张牌,才能让从小 S和小 Q借来的牌中,可以选出 52 张牌构成一副完整的扑克牌。
        为了方便你的输入,我们使用字符D代表方片,字符C代表草花,字符H代表红桃,字符S代表黑桃,这样每张牌可以通过一个长度为2的字符串表示,其中第一个字符表示这张牌的花色,第二个字符表示这张牌的点数,例如 CA 表示草花 A,ST 表示黑桃 T(黑桃 10)。

2、输入输出

输入描述:

从文件 poker.in 中读入数据。
输入的第一行包含一个整数 n 表示牌数。
接下来 n 行:
每行包含一个长度为 2 的字符串描述一张牌,其中第一个字符描述其花色,第二个
字符描述其点数。

输出描述:

输出到文件 poker.out 中。
输出一行一个整数,表示最少还需要向小 S 借几张牌才能凑成一副完整的扑克牌。

输入样例:

4
DQ
H3
DQ
DT

输出样例:

49

数据范围:

二、算法分析

  1. 从给定题目的初步分析本题难度不大,可以使用哈希数组进行模拟实现
  2. 思路就是建立一个哈希数组对应52张牌,将输入的每张扑克牌转换成对应的数组值,输入一张扑克牌就进行标记(赋值1),最后只要将52减去哈希数组中1的个数之后就是我们需要借的扑克牌数量
  3. 所以该题关键就是如何将输入的四种花色的扑克牌转换成对应的1-52这52个数字,这个其实也不难,我这边是将红桃设为前13张,黑桃设为14-26张,草花设为27-39张,方片设为40-52张
  4. 具体可以使用字符串或者字符数组来存放每次输入的扑克牌,然后判断第一个字符对应的花色,接着判断第二个字符对应点数,这里判断点数的时候需要转换一下将:A-1,T-10,J-11,Q-12,K-13;只要用两个switch case就可以解决
  5. 这样设计的算法由于是对n张牌处理,所以时间复杂度为O(n),空间复杂度是O(1)

三、程序编写

#include <bits/stdc++.h>
using namespace std;
const int N = 52;
int porker[N+1];
int main()
{
	int n;
	cin >> n;
	for(int i=0;i<n;i++)
	{
		string s;
		cin >> s;
		switch(s[0])
		{
			case 'H'://红桃
				{
					int t = 0;
					switch(s[1])
					{
						case 'A': t = 1;break;
						case 'T': t = 10;break;
						case 'J': t = 11;break;
						case 'Q': t = 12;break;
						case 'K': t = 13;break;
						default: t = int(s[1]);break;				
					}
					porker[t] = 1;break;
				}
			case 'S'://黑桃
				{
					int t = 13;
					switch(s[1])
					{
						case 'A': t += 1;break;
						case 'T': t += 10;break;
						case 'J': t += 11;break;
						case 'Q': t += 12;break;
						case 'K': t += 13;break;
						default: t += int(s[1]);break;				
					}
					porker[t] = 1;break;
				}
			case 'C'://草花
				{
					int t = 26;
					switch(s[1])
					{
						case 'A': t += 1;break;
						case 'T': t += 10;break;
						case 'J': t += 11;break;
						case 'Q': t += 12;break;
						case 'K': t += 13;break;
						default: t += int(s[1]);break;				
					}
					porker[t] = 1;break;
				}
			case 'D'://方片
				{
					int t = 13;
					switch(s[1])
					{
						case 'A': t += 1;break;
						case 'T': t += 10;break;
						case 'J': t += 11;break;
						case 'Q': t += 12;break;
						case 'K': t += 13;break;
						default: t += int(s[1]);break;				
					}
					porker[t] = 1;break;
				}				
		}
	}
	
	int s = 0;//牌数
	for(int i=0;i<52;i++)
	{
		s += porker[i];
	}
	s = 52 - s;
	cout << s << endl;
	return 0;
}

PS:以上程序没有写文件操作,小朋友在真正作答的时候加上文件读取和关闭即可 

本文作者:小兔子编程 作者首页:小兔子编程-CSDN博客

四、运行结果

4
DQ
H3
DQ
DT

49

五、考点分析

难度级别:一般,这题相对而言在于花色和数组的转换,具体主要考查如下:

  1. 分析题目,找到解题思路
  2. 充分掌握变量和数组的定义和使用
  3. 学会模拟算法的使用
  4. 学会switch语句的使用
  5. 学会输入流对象cin的使用,从键盘读入相应的数据
  6. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  7. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  8. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  9. 充分掌握变量定义和使用、分支语句、循环语句和模拟算法的应用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

六、推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展&#xff08;AttributeModifier、AttributeUpdater&#xff09; Styles装饰器&#xff1a;定义组件重用样式   ;Extend装饰器&#xff1a;定义扩展组件样式   自定义扩展&#xff1a;AttributeModifier、AttributeUpdater 1.1. 区…

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

【高心星出品】 目录 应用打包HAP、HAR、HSPModule类型HAPHAR创建HAR建立依赖HAR共享内容 HSP创建HSP建立依赖同上HSP共享内容同上 HAR VS HSP 应用打包HAP、HAR、HSP 一个应用通常会包含多种功能&#xff0c;将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发…

【哈工大_操作系统实验】Lab9 proc文件系统的实现

本节将更新哈工大《操作系统》课程第九个 Lab 实验 proc文件系统的实现。按照实验书要求&#xff0c;介绍了非常详细的实验操作流程&#xff0c;并提供了超级无敌详细的代码注释。 实验目的&#xff1a; 掌握虚拟文件系统的实现原理&#xff1b;实践文件、目录、文件系统等概念…

【C++开篇】

首先初阶的数据结构相信大家已经学习的差不多了&#xff0c;关于初阶数据结构排序的相关内容的总结随后我也会给大家分享出来。C语言和C有许多相同的地方&#xff0c;但也有许多不相同的地方。接下来的C部分&#xff0c;我们主要是针对C与C语言不同的地方来与大家进行分享。其中…

量子变分算法 (python qiskit)

背景 变分量子算法是用于观察嘈杂的近期设备上的量子计算效用的有前途的候选混合算法。变分算法的特点是使用经典优化算法迭代更新参数化试验解决方案或“拟设”。这些方法中最重要的是变分量子特征求解器 (VQE)&#xff0c;它旨在求解给定汉密尔顿量的基态&#xff0c;该汉密尔…

这是一篇vue3 的详细教程

Vue 3 详细教程 一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;用于构建用户界面。Vue 3 是其最新版本&#xff0c;带来了许多新特性和性能优化&#xff0c;使开发更加高效和灵活。 二、环境搭建 安装 Node.js 前往Node.js 官方网站下载并安装适合你…

WPF+MVVM案例实战(六)- 自定义分页控件实现

文章目录 1、项目准备2、功能实现1、分页控件 DataPager 实现2、分页控件数据模型与查询行为3、数据界面实现 3、运行效果4、源代码获取 1、项目准备 打开项目 Wpf_Examples&#xff0c;新建 PageBarWindow.xaml 界面、PageBarViewModel.cs ,在用户控件库 UserControlLib中创建…

WASM 使用说明23事(RUST实现)

文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性&#xff1a; 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码&#xff08;js引用&#xff09;3.2 访问页面4 导入js function4.1 编写lib.rs文件&#xff0c;内容…

UML 总结(基于《标准建模语言UML教程》)

定义 UML 又称为统一建模语言或标准建模语言&#xff0c;是一种标准的图形化建模语言&#xff0c;它是面向对象分析与设计的一种标准表示。尽管UML 本身没有对过程有任何定义&#xff0c;但UML 对任何使用它的方法&#xff08;或过程&#xff09;提出的要求是&#xff1a;支持用…

【含开题报告+文档+PPT+源码】基于vue框架的东升餐饮点餐管理平台的设计与实现

开题报告 在当前信息化社会背景下&#xff0c;餐饮行业正经历着由传统线下服务模式向线上线下深度融合的转变。随着移动互联网技术及大数据应用的飞速发展&#xff0c;用户对于餐饮服务平台的需求也日益多元化和个性化。他们期望能在一个集便捷、高效、个性化于一体的平台上完…

自动化测试工具Ranorex Studio(十六)-添加新Action

在Action表中&#xff0c;有两种手动添加action的方式。 一种方法是指定Action本身&#xff08;’添加新Action’&#xff09;&#xff0c;然后分配对应的对象库条目&#xff08;在多数情况下&#xff09;。 第二种方法是直接把对象库条目拖放到Action表内&#xff0c;然后生成…

力扣 中等 2466.统计构造好字符串的方案数

文章目录 题目介绍题解 题目介绍 题解 题意&#xff1a;每次可以爬 zero 或 one 个台阶&#xff0c;返回爬 low 到 high 个台阶的方案数。 和上题337.组合总和 &#xff08;链接&#xff09;的思路一样&#xff0c;只不过是将可以爬的台阶数从数组换成了两个数&#xff08;ze…

视频美颜平台的搭建指南:基于直播美颜SDK的完整解决方案

众所周知&#xff0c;直播美颜SDK是实现视频美颜功能的核心。本文将详细解析如何基于直播美颜SDK搭建一个完整的视频美颜平台。 一、视频美颜SDK的核心功能 直播美颜SDK作为平台的技术核心&#xff0c;能够提供丰富的美颜效果和稳定的视频处理能力。通常&#xff0c;SDK具备以…

iOS AVAudioSession 详解【音乐播放器的配置】

前言 在 iOS 音频开发中&#xff0c;AVAudioSession 是至关重要的工具&#xff0c;它控制着应用的音频行为&#xff0c;包括播放、录音、后台支持和音频中断处理等。对于音乐播放器等音频需求强烈的应用&#xff0c;设计一个合理的 AVAudioSession 管理体系不仅能保证音频播放…

RabbitMQ是一个开源的消息代理和队列服务器

RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;它基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff09;协议实现&#xff0c;同时也支持其他消息协议如STOMP、MQTT等。作为一个可靠的消息传递服务&#xff0c;RabbitMQ在分…

青少年CTF平台的基础题writeup

青少年CTF平台 1、文章管理系统 首先他这里有一个问号id&#xff0c;就想着使用mysql跑一下&#xff0c;但是windows的sqlmap很不给力&#xff0c;都不动&#xff0c;所以我后面换成了kali机来跑 跑一下就跑出了好多的数据库 第一次我使用ctftraining不出货&#xff0c;跑的一…

Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)

coppelia sim[V-REP]仿真实现 机器人于3D相机手眼标定与实时视觉追踪 一 标定板的制作生成标定的PDF文件PDF转为图像格式图像加载到仿真中 二 仿真场景设置加载机器人加载的控制dummy ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b48549d355d8441d8dfc20bc7ba7196…

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中&#xff0c;Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃&#xff0c;Kubernetes 尝试重启该容器&#xff0c;但由于持续崩溃&#xff0c;重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …

.NET Core WebApi第1讲(概念):Web基础、AJAX、JQuery

动态页面&#xff1a;数据流动 / Web服务器 / Ajax / 前后端分离 / restful风格源栈课堂一起帮https://17bang.ren/Code/261 一、Web基础 二、AJAX诞生 三、JQuery

ctfshow(262,264)--反序列化漏洞--字符串逃逸

Web262 源代码&#xff1a; index.php: error_reporting(0); class message{public $from;public $msg;public $to;public $tokenuser;public function __construct($f,$m,$t){$this->from $f;$this->msg $m;$this->to $t;} }$f $_GET[f]; $m $_GET[m]; $t $_…