【C++】 —— 笔试刷题day_23

【C++】 —— 笔试刷题day_23

一、 打怪

题目解析

在这里插入图片描述
我们现在要去刷毛球怪,我的攻击和血量是ha、毛球怪的攻击和血量是HA

我们和毛球怪的对决是轮流攻击(我们先手),当血量小于等于0时死亡;

现在我们要求在自己存活的条件下,最多能够杀死几只毛球怪;最后输出这个数量。

注意:如果能够杀死无数只怪物,就输出-1

算法思路

对于这道题,首先我们想到的可能就是模拟整个打怪过程,然后记录杀死怪物的数量。

而对于模拟整个过程,程序运行的时间也太长了;而且如果我们能够杀死无数只怪物,那我们要一直模拟整个过程;那也太麻烦了

有没有更加简单的方法?

这道题我们每一个怪物的血量和攻击都是固定的,那我们能不能求出来我们杀死一只怪物所受到的伤害,在根据我们自身的血量,不就可以直接计算出我们能够杀死多少只怪物吗?

所以我们的思路就是先求出来我们杀死一只怪物要攻击多少次,再求出自己所受到的伤害,最后直接计算出能够杀死怪物的数量。计算杀死一只怪要攻击多少次:m = H/a + (H%a == 0?0:1);我们要受到多少次攻击:n = m-1;我们先手,所以我们受到攻击的次数比我们攻击的次数少一)我们杀死一只怪要受到的伤害:r = m*A;(我们受到的伤害就等于受到攻击的次数*怪物的攻击)能杀死怪物的最多数量:ret = h%r==0?(h/r-1):h/r;题目的前提是我们要存活下来,如果h%r==0,那在面对第h/r这只怪物时,我们的生命值是先减到0的,所以我们杀不死这一只怪,杀怪的数量就等于h/r -1;如果h%r != 0,那就说明杀死第h/r只怪以后我们还是存活的,那杀怪的数量就是h/r

最后我们来处理一下能够杀死无数只怪的问题

如果能够杀死无数只怪,那就说明我们杀死一只怪是没有掉生命值的;

那只有我们能够一次攻击杀死怪物才会无伤打怪,那也就是说我们的攻击a要大于等于怪物的生命H的。

所以当a>=H时,输出-1即可。

代码实现

#include<iostream>usingnamespace std;int h,a,H,A;intfun(){if(H<=a)return-1;int n = H/a +(H%a ==0?0:1);//几次攻击能杀死一只怪int m = n-1;//杀死一只怪要受到几次怪物的攻击。int r = m*A;//杀死一只怪要受到的伤害int ret = h%r ==0? h/r-1:h/r;return ret;}intmain(){int t; cin>>t;while(t--){ cin>>h>>a>>H>>A; cout<<fun()<<endl;}return0;}

二、字符串分类

题目解析

在这里插入图片描述
这里题目给定t个字符串,让我们对这t个字符串进行分类;

对于字符串AB,如果A可以通过交换任意位置的两个字符,可以变换到B(可以交换无数次)那字符串AB就是属于同一类字符串;

例如:abcdabdcdcba这些字符串都属于同一类。

算法思路

对于两个字符串,如果它们属于同一类,那这两个字符串中字符的种类和每一个字符出现的次数都是相等的。

如果我们直接去判断两个字符串中字符种类和字符出现的次数,那就非常麻烦了;

这里我们想一想,如果AB字符串属于同一类,那它们中字符的种类和出现的次数都是相等的,那如果我们将字符串排一下序,那AB排序后的结果是不是同一个字符串呢?

很显然是的,abcddcba排序之后都是abcd

那字符串经过排序后的字符串是相等的,那这些字符串是不是都属于同一类字符串;

所以,我们这里思路就是:先对字符串进行排序,在记录一下排序后字符串的种类即可排序字符串:使用sort即可记录排序后字符串的种类:使用hash记录排序后字符串的种类**结果:**我们只需要去hash表中查看字符串要多少种即可。

代码实现

#include<iostream>#include<algorithm>#include<unordered_set>usingnamespace std;intmain(){int t; cin >> t; unordered_set<string> hash;while(t--){ string str; cin >> str;sort(str.begin(), str.end()); hash.insert(str);} cout << hash.size()<< endl;}

三、城市群数量

题目解析

在这里插入图片描述
题目给定一个n阶矩阵,其中每一个位置是01

如果dp[i][j] == 1就表示,第i个城市和第j个城市相连;(如果a城市和b城市相连,bc城市相连,那就任务a城市和c城市相连。

现在我们要去求在这n个城市中,有多少个城市群。

算法思路

这道题,就是一道搜索题目,我们要使用深度优先遍历dfs或者广度优先遍历来解决bfs

思路简单来说就是,遍历每一个城市,如果这个城市还没有和其他城市成群,那就从当前城市来一次深度优先遍历dfs,将它所在城市群的所有城市成群;

最后,我们只需要记录进行了几次dfs(进行了多少次dfs那就表示存在多少个城市群)。

代码实现

classSolution{public:bool vis[201]={false};voiddfs(vector<vector<int>>& m,int pos,int n){ vis[pos]=true;for(int i =0; i < n; i++){if(m[pos][i]==1&& vis[i]==false)dfs(m, i, n);}}intcitys(vector<vector<int>>& m){int n = m.size();int ret =0;for(int i =0; i < n; i++){if(vis[i]==false){ ret++;dfs(m, i, n);}}return ret;}};

到这里本篇文章内容就结束了
感谢各位的支持

Read more

GESP2024年3月认证C++二级( 第三部分编程题(2)小杨的日字矩阵 )

GESP2024年3月认证C++二级( 第三部分编程题(2)小杨的日字矩阵 )

一、🎬 小杨要画“日”字 有一天,小杨想用电脑画一个大大的“日”字。 比如当 n = 5 时,他想画成这样: |---| |xxx| |---| |xxx| |---| 是不是很像“日”字? 😄 二、🌟 题目规则 给你一个奇数 n(比如 5、7、9…) 你要打印一个 n × n 的正方形。 规则: ① 最左列 和 最右列 全部是 | ② 第一行、最后一行、中间一行 全部是 -(但两边还是 |) ③ 其他位置全部是 x 三、🧠 先理解结构 假设 n

By Ne0inhk

STL缩略图:Windows文件资源管理器终极3D预览解决方案

STL缩略图:Windows文件资源管理器终极3D预览解决方案 【免费下载链接】STL-thumbnailShellextension for Windows File Explorer to show STL thumbnails 项目地址: https://gitcode.com/gh_mirrors/st/STL-thumbnail 还在为管理海量STL文件而头疼吗?STL-thumbnail为您带来革命性的3D模型预览体验,让Windows文件资源管理器直接显示精美的3D缩略图! 核心价值矩阵:四大维度重塑文件管理 直观可视化 - 无需打开专业软件,文件夹内直接预览3D模型外观 极致性能 - 优化的渲染引擎确保快速流畅的缩略图生成 全面兼容 - 支持所有STL格式变体,从ASCII到二进制 资源友好 - 智能内存管理,系统运行稳定高效 极速入门指南:三步完成部署 环境准备 * Windows 10/11操作系统 * .NET Framework 4.7.

By Ne0inhk
C++ 智能指针:示例、原理、适用场景全方位解读

C++ 智能指针:示例、原理、适用场景全方位解读

智能指针被设计出来就是为了解决原生指针的问题的,所以,要理解智能指针的作用,还是得“从问题入手”,看一下原生指针都有哪些“痛点”。理解本文内容需要对虚拟内存的堆和栈对清晰的认识,也需要清楚地知道 C++ 是如何使用堆和栈的,关于这部分内容,请参考 《编程底层概念回顾:虚拟内存、栈、栈帧、堆》和 《C++ 对象和嵌套对象的创建与销毁》两篇文章。 1. 原生指针的“痛” 原生指针也叫裸指针,是 C++ 里知名的“双刃剑”,它的“底层性”和“灵活性”既是优势,也是劣势,在智能指针出现之前,使用指针的过程中会出现很多典型问题,我们逐一梳理一下: * 内存泄漏由裸指针引起的内存泄漏问题真得有很多,究其因在于:C++ 没有像 Java 那样的垃圾回收机制,完全靠程序员掌控堆空间的回收,而人是容易犯错的,可能是忘记了手写 delete 操作,

By Ne0inhk

Visual C++运行库完整解决方案:一站式管理所有DLL依赖

Visual C++运行库完整解决方案:一站式管理所有DLL依赖 【免费下载链接】vcredistAIO Repack for latest Microsoft Visual C++ Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 在Windows系统环境中,Visual C++运行库缺失问题一直是困扰开发者和普通用户的常见技术障碍。当应用程序依赖于特定版本的VC++运行时组件,而目标系统缺少相应DLL文件时,就会导致程序启动失败,严重影响工作效率和用户体验。 技术原理深度解析 运行库依赖机制 Windows应用程序在编译过程中会链接到特定版本的C运行时库。这些库包含标准C函数和C++类的实现,如内存管理、字符串操作、文件I/O等基础功能。当程序运行时,系统需要加载对应的DLL文件来执行这些函数调用。 核心依赖关系: 应用程序版本所需运行库架构支持兼容性说明VS 2005VC++ 2005 Redistributablex86/x64基础运行时支持VS 2008VC+

By Ne0inhk