本文为2023年6月GESP C++四级的上机题目的详细题解!觉得写的不错或者有帮助可以点个赞啦!

(第一次讲解视频,有问题可以指出,不足之处也可以指出)

目录

题目一讲解视频:

题目二讲解视频:

题目一: 幸运数

题目大意:

解题思路:

代码(C++):

题目二:图像压缩

题目大意:

解题思路:

代码(C++):



题目一讲解视频:

2023年6月GESP C++四级上机题一


题目二讲解视频:

2023年6月GESP C++四级上机题二


题目一: 幸运数

B3850 [GESP202306 四级] 幸运数 - 洛谷

题目大意:

题目首先定义了,一个数字的个位数为第一位,十位数为第二位...以此内推。

然后呢,对于一个数字num的奇数位置,提取出来,然后进行如下操作:

定义这个数字为x,易得0 <= x <= 9。现在将x * 7,然后现在不断的进行以下的操作,直到x小于等于9:

求出此时x的数位和sum,然后把x赋值成sum。

经过上述操作后,把x放回原来的位置。

如果num的数位和是8的倍数,那么num是幸运数,输出T,否则输出F。

解题思路:

题目主要考察的是模拟,代码实现能力

根据题目意思,我们主要的操作对象是num的奇数位置,我们可以把num转换成字符串,可以输入的时候直接用字符串变量接收。

注意个位数是字符串的最后一位,我们从字符串的最后一位开始遍历,然后每次让i -= 2即可保证获取的是“奇数位置”。

然后根据题目意思进行模拟,在while (x > 9)的循环里面不断的求出当前x的数位和,赋值给x,最后得出的x,直接把原来的位置的字符变成新的x即可,注意数字和字符之间的转换。

最后不要忘记求出数位和,然后再判断是否是8的倍数。

注意题目输入的是N个数字,我们对每一个数字单独判断。

没什么用的小优化:每个“奇数位置”的操作都是单独进行的,那么肯定有一个对应值,我们可以先把每个数字操作的结果求出来放在数组里面,然后直接使用即可。

代码(C++):

#include <bits/stdc++.h>
//https://blog.csdn.net/2401_83669813 csdn: @立志成为算法讲师void solve() {//2.std::string s;std::cin >> s;int n = s.size();//3.for (int i = n - 1; i >= 0; i -= 2) {int num = s[i] - '0';num *= 7;//4.5.while (num > 9) {int t = num;int sum = 0;while (t > 0) {sum += t % 10;t /= 10;}num = sum;}//6.s[i] = num + '0';}int sum = 0;for (char c : s) {sum += c - '0';}if (sum % 8 == 0) {std::cout << "T\n";} else {std::cout << "F\n";}
}int main() {/*1.捆绑测试2.把数字当成字符串输入3.从最后一位开始遍历4.变换操作5.当数字大于9的时候,不断的求数位和,然后赋值给新的数字6.把变换后的数字赋值回去*/int N;std::cin >> N;while (N--) {solve();}
}

题目二:图像压缩

B3851 [GESP202306 四级] 图像压缩 - 洛谷

题目大意:

给你n个长度为偶数,并且都相等的字符串s,这n个字符串组成一幅256级灰阶的灰度图像。

对于其中的一个字符串,每两个字符组成一个字符串,表示一个16进制的数字,大小为0到255,也就是16进制的0到FF,这个大小表示这个像素点的灰阶。题目保证n个字符串包含的灰阶至少有16种。

现在我们要把这个256级灰阶的灰度图像压缩成16级的灰度图像。

压缩方式为:

统计出这个图像每一个灰阶的数量,然后取数量最大的16种,如果存在灰阶数量相同的灰阶,那么灰阶值小的在前面。

先把这16种灰阶按照从大到小的顺序输出出来。

现在把这数量最大的16种灰阶编号为0到F,也就是十进制的0到15。

对于其他的灰阶y,我们计算出灰度与16个灰阶最近的值(灰阶大小,不是个数),也就是绝对值大小,把y编号成相差的绝对值最小的那个,如果有绝对值相同的点,那么我们就编号成编号小的那个。

然后把压缩后的图像输出出来。

解题思路:

本题主要考察,进制的转换,位运算,自定义排序,模拟,代码实现能力。


我们首先把握题目的关键要求,把每两个字符组成的字符串作为一个16进制数字,计算出出现次数最多的16个16进制数字,并且后面的排序和作差都要关注这16个16进制数字的大小。

那么我们可以这么写,先把16进制转换成10进制,然后我们用一个长度为256的数组cnt来记录每一个16进制数字出现的次数。也就是cnt[i]为大小为i的数字的出现次数。


统计了出现次数后,我们现在进行自定义排序,求出里面最大的那16个数字。

由于题目要求:然后取数量最大的16种,如果存在灰阶数量相同的灰阶,那么灰阶值小的在前面。

那我们可以这么简单的写,我们直接用一个数组id,来存0到255这些数字,然后排序这个数组,数组里面两个数字的cnt[a] != cnt[b]的时候,cnt大的在前面,否则就是数字小的在前面。

这样操作之后数组id里面的前16个数字就是我们想要的16个数字了。

可以先输出出来,记得按照题目转换回原来的16进制。


最后我们要实现的是,输出压缩后的图像,对于每一个16进制的数字,先转换成10进制,然后根据题目要求求出差的绝对值最小的那个,再根据题目要求编号成0 - F即可。

具体实现详见代码。

代码(C++):

#include <bits/stdc++.h>
//https://blog.csdn.net/2401_83669813 csdn: @立志成为算法讲师int toNum(char c) {if (c <= '9') {return c - '0';}return c - 'A' + 10;
}//16进制转换成10进制
int to10(std::string s) {int res = toNum(s[0]) * 16 + toNum(s[1]);return res;
}char toChar(int num) {if (num < 10) {return num + '0';}return num - 10 + 'A';
}//10进制转换成16进制
std::string to16(int num) {std::string res(2, '0');res[1] = toChar(num % 16);num /= 16;res[0] = toChar(num % 16);return res;
}int main() {/*1.用一个长度为256的数组cnt来统计出现次数2.把每一个256的数字都写出来,用自定义排序根据cnt[i]和数字大小进行排序3.把最大的16个输出出来4.把其他的数字进行压缩*/int n;std::cin >> n;std::vector<std::string> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}int m = a[0].size();//1.std::vector<int> cnt(256);for (auto& s : a) {for (int i = 0; i < m; i += 2) {std::string t = s.substr(i, 2); //从当前字符开始提取两个字符int num10 = to10(t);cnt[num10]++;}}//cnt[i]就表示数字i出现的次数std::vector<int> mx16(256);for (int i = 0; i < 256; i++) {mx16[i] = i;}//2.std::sort(mx16.begin(), mx16.end(), [&](int u, int v){if (cnt[u] != cnt[v]) {return cnt[u] > cnt[v];}return u < v;});//3.for (int i = 0; i < 16; i++) {std::cout << to16(mx16[i]);}std::cout << "\n";//4.for (auto& s : a) {for (int i = 0; i < m; i += 2) {std::string t = s.substr(i, 2);int num = to10(t);int id, mnD = 256;for (int i = 0; i < 16; i++) {int d = abs(num - mx16[i]);if (d < mnD) {mnD = d;id = i;}}std::cout << toChar(id);}std::cout << "\n";}
}

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

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

相关文章

内网穿透 FRP 配置指南

关键词&#xff1a;内网穿透、FRP配置、frps、frpc、远程访问、自建服务器、反向代理、TCP转发、HTTP转发 在开发或部署项目时&#xff0c;我们经常遇到内网设备无法被公网访问的问题&#xff0c;例如你想从外网访问你家里的 NAS、远程调试开发板&#xff0c;或是访问本地测试环…

SpringBoot 信用卡检测、OpenAI gym、OCR结合、DICOM图形处理、知识图谱、农业害虫识别实战

信用卡欺诈检测通常使用公开数据集 数据准备与预处理 信用卡欺诈检测通常使用公开数据集如Kaggle的信用卡交易数据集。数据预处理包括处理缺失值、标准化数值特征、处理类别特征。在Spring Boot中,可以使用pandas或sklearn进行数据预处理。 // 示例:使用Spring Boot读取CS…

使用 Docker 部署 Golang 程序

Docker 是部署 Golang 应用程序的绝佳方式,它可以确保环境一致性并简化部署流程。以下是完整的指南: 1. 准备 Golang 应用程序 首先确保你的 Go 应用程序可以正常构建和运行。一个简单的示例 main.go: package mainimport ("fmt""net/http" )func ha…

从零开始的CAD|CAE开发: LBM源码实现分享

起因:上期我们写了流体仿真的经典案例: 通过LBM,模拟计算涡流的形成,当时承诺: 只要验证通过,就把代码开源出来;ok.验证通过了,那么我也就将代码全都贴出来代码开源并贴出:public class LidDrivenCavityFlow : IDisposable{public LidDrivenCavityFlow(int width 200, int hei…

仓库管理系统-17-前端之物品类型管理

文章目录 1 表设计(goodstype) 2 后端代码 2.1 Goodstype.java 2.2 GoodstypeMapper.java 2.3 GoodstypeService.java 2.4 GoodstypeServiceImpl.java 2.5 GoodstypeController.java 3 前端代码 3.1 goodstype/GoodstypeManage.vue 3.2 添加菜单 3.3 页面显示 1、goodstype表设…

共识算法深度解析:PoS/DPoS/PBFT对比与Python实现

目录 共识算法深度解析:PoS/DPoS/PBFT对比与Python实现 1. 引言:区块链共识的核心挑战 2. 共识算法基础 2.1 核心设计维度 2.2 关键评估指标 3. PoS(权益证明)原理与实现 3.1 核心机制 3.2 Python实现 4. DPoS(委托权益证明)原理与实现 4.1 核心机制 4.2 Python实现 5. P…

3.JVM,JRE和JDK的关系是什么

3.JVM&#xff0c;JRE和JDK的关系是什么 1.JDK&#xff08;Java Development Kit&#xff09;&#xff0c;是功能齐全的Java SDK&#xff0c;包含JRE和一些开发工具&#xff08;比如java.exe,运行工具javac.exe编译工具&#xff0c;生成.class文件&#xff0c;javaw.exe,大多用…

深度学习技术发展思考笔记 || 一项新技术的出现,往往是为了解决先前范式中所暴露出的特定局限

深度学习领域的技术演进&#xff0c;遵循着一个以问题为导向的迭代规律。一项新技术的出现&#xff0c;往往是为了解决先前范式中所暴露出的特定局限。若将这些新技术看作是针对某个问题的“解决方案”&#xff0c;便能勾勒出一条清晰的技术发展脉络。 例如&#xff0c;传统的前…

Promise的reject处理: then的第二个回调 与 catch回调 笔记250804

Promise的reject处理: then的第二个回调 与 catch回调 笔记250804 Promise 错误处理深度解析&#xff1a;then 的第二个回调 vs catch 在 JavaScript 的 Promise 链式调用中&#xff0c;错误处理有两种主要方式&#xff1a;.then() 的第二个回调函数和 .catch() 方法。这两种方…

Maven模块化开发与设计笔记

1. 模块化开发模块化开发是将大型应用程序拆分成多个小模块的过程&#xff0c;每个模块负责不同的功能。这有助于降低系统复杂性&#xff0c;提高代码的可维护性和可扩展性。2. 聚合模块聚合模块&#xff08;父模块&#xff09;用于组织和管理多个子模块。它定义了项目的全局配…

sqli-labs:Less-21关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $sql"SELECT * FROM users WHERE username($cookee) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;单引号、括号包裹&#xff09;、GET操作提示&#xff1a;参数需以)闭合关键参数&#xff1a;cookee p…

大模型+垂直场景:技术纵深、场景适配与合规治理全景图

大模型垂直场景&#xff1a;技术纵深、场景适配与合规治理全景图​​核心结论​&#xff1a;2025年大模型落地已进入“深水区”&#xff0c;技术价值需通过 ​领域纵深&#xff08;Domain-Deep&#xff09;​、数据闭环&#xff08;Data-Driven&#xff09;​、部署友好&#x…

Kotlin Daemon 简介

Kotlin Daemon 是 Kotlin 编译器的一个后台进程&#xff0c;旨在提高编译性能。它通过保持编译环境的状态来减少每次编译所需的启动时间&#xff0c;从而加快增量编译的速度。 Kotlin Daemon 的主要功能增量编译&#xff1a; 只编译自上次编译以来发生更改的文件&#xff0c;节…

鸿蒙南向开发 编写一个简单子系统

文章目录 前言给设备&#xff0c;编写一个简单子系统总结 一、前言 对于应用层的开发&#xff0c;搞了十几年&#xff0c;其实已经有点开发腻的感觉了&#xff0c;翻来覆去&#xff0c;就是调用api&#xff0c;页面实现&#xff0c;最多就再加个性能优化&#xff0c;但对底层…

超详细:2026年博士申请时间线

博士申请是一场持久战&#xff0c;需要提前规划。那么&#xff0c;如何科学安排2026年博士申请时间线&#xff1f;SCI论文发表的最佳时间节点是什么&#xff1f;今天给所有打算申博的同学们&#xff0c;详细解析下&#xff0c;每个时间节点的重点内容。2025年4月&#xff1a;是…

Python爬虫实战:研究tproxy代理工具,构建电商数据采集系统

1. 引言 1.1 研究背景 在大数据与人工智能技术快速发展的背景下,网络数据已成为企业决策、学术研究、舆情监控的核心资源。据 Statista 统计,2024 年全球互联网数据总量突破 180ZB,其中 80% 为非结构化数据,需通过爬虫技术提取与转化。Python 凭借其简洁语法与丰富的爬虫…

HighgoDB查询慢SQL和阻塞SQL

文章目录环境文档用途详细信息环境 系统平台&#xff1a;N/A 版本&#xff1a;6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,4.3.4.8,4.3.4.7,4.3.4.6,4.3.4.5,4.3.4.4,4.3.4.3,4.3.4.2,4.3.4,4.7.8,4.7.7,4.7.6,4.7.5,4.3.2 文档用途 本文介绍了如何对数据库日志进行分析…

day15 SPI

1串行外设接口概述1.1基本概念SPI&#xff08;串行外设接口&#xff09;是一种高速、全双工、同步的串行通信协议。串行外设接口一般是需要4根线来进行通信&#xff08;NSS、MISO、MOSI、SCK&#xff09;&#xff0c;但是如果打算实现单向通信&#xff08;最少3根线&#xff09…

阿里云微服务引擎 MSE 及 API 网关 2025 年 7 月产品动态

点击此处&#xff0c;了解微服务引擎 MSE 产品详情。

RFID技术在汽车倍速链中的应用:驱动智能制造的隐形引擎

RFID技术在汽车倍速链中的应用&#xff1a;驱动智能制造的隐形引擎某汽车汽车倍速链现场存在问题&#xff1a;&#xff08;1&#xff09;条形码需人工扫描&#xff0c;数据采集延迟率高达15%&#xff0c;导致生产调度与实际工况脱节&#xff1b;&#xff08;2&#xff09;涂装车…