GESP认证C++编程真题解析 | 202306 四级

news/2026/1/18 21:06:01/文章来源:https://www.cnblogs.com/guolianggsta/p/19499124

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


编程题

B3850 幸运数

【题目来源】

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

【题目描述】

小明发明了一种 “幸运数”。一个正整数,其偶数位不变(个位为第 \(1\) 位,十位为第 \(2\) 位,以此类推),奇数位做如下变换:将数字乘以 \(7\),如果不大于 \(9\) 则作为变换结果,否则把结果的各位数相加,如果结果不大于 \(9\) 则作为变换结果,否则(结果仍大于 \(9\))继续把各位数相加,直到结果不大于 \(9\),作为变换结果。变换结束后,把变换结果的各位数相加,如果得到的和是 \(8\) 的倍数,则称一开始的正整数为幸运数。

例如,\(16347\):第 \(1\) 位为 \(7\),乘以 \(7\) 结果为 \(49\),大于 \(9\),各位数相加为 \(13\),仍大于 \(9\),继续各位数相加,最后结果为 \(4\);第 \(3\) 位为 \(3\),变换结果为 \(3\);第 \(5\) 位为 \(1\),变换结果为 \(7\)。最后变化结果为 \(76344\),对于结果 \(76344\) 其各位数之和为 \(24\),是 \(8\) 的倍数。因此 \(16347\) 是幸运数。

【输入】

输入第一行为正整数 \(N\),表示有 \(N\) 个待判断的正整数。约定 \(1 \le N \le 20\)

从第 \(2\) 行开始的 \(N\) 行,每行一个正整数,为待判断的正整数。约定这些正整数小于 \(10^{12}\)

【输出】

输出 \(N\) 行,对应 \(N\) 个正整数是否为幸运数,如是则输出 T,否则输出 F

提示:不需要等到所有输入结束再依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。

【输入样例】

2
16347
76344

【输出样例】

T
F

【算法标签】

《洛谷 B3850 幸运数》 #函数与递归# #GESP# #2023#

【代码详解】

#include <bits/stdc++.h>
using namespace std;#define int long long  // 使用长整型
const int N = 15;      // 数组大小,用于存储数字的各位
int n;                 // 测试用例数量
int a[N];             // 存储数字的各位数字/*** 递归计算数字的数字根* 数字根:反复将数字的各位相加,直到得到一位数* 例如:38 -> 3+8=11 -> 1+1=2* @param x 输入数字* @return 数字根*/
int calc(int x)
{// 调试输出// cout << "x " << x << endl;// 如果已经是一位数,直接返回if (x <= 9){return x;}// 计算各位数字之和int res = 0;while (x){res += x % 10;  // 加上个位数字x /= 10;        // 去掉个位}// 递归计算数字根return calc(res);
}/*** 检查数字是否符合特定规则* 规则:* 1. 从个位开始(第1位),奇数位置的数字乘以7* 2. 计算乘积的数字根* 3. 所有处理后的数字之和能被8整除* @param x 要检查的数字* @return 如果处理后数字之和能被8整除返回true,否则false*/
bool check(int x)
{// 将数字分解为各位数字int cur = 0;  // 数字位数while (x){a[++cur] = x % 10;  // 存储个位x /= 10;            // 去掉个位}// 处理奇数位置的数字for (int i = 1; i <= cur; i++){if (i % 2 == 1)  // 奇数位置(从个位开始算第1位){int tmp = a[i] * 7;  // 乘以7a[i] = calc(tmp);    // 计算数字根}}// 计算处理后的数字之和int ans = 0;for (int i = 1; i <= cur; i++){ans += a[i];}// 判断和是否能被8整除return ans % 8 == 0;
}signed main()  // 因为使用了#define int long long
{// 输入测试用例数量cin >> n;// 处理每个测试用例while (n--){int x;cin >> x;// 检查数字并输出结果if (check(x)){cout << "T" << endl;  // 符合条件}else{cout << "F" << endl;  // 不符合条件}}return 0;
}

【运行结果】

2
16347
T
76344
F

B3851 图像压缩

【题目来源】

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

【题目描述】

图像是由很多的像素点组成的。如果用 \(0\) 表示黑,\(255\) 表示白,\(0\)\(255\) 之间的值代表不同程度的灰色,则可以用一个字节表达一个像素(取值范围为十进制 0-255、十六进制 00-FF)。这样的像素组成的图像,称为 \(256\) 级灰阶的灰度图像。

现在希望将 \(256\) 级灰阶的灰度图像压缩为 \(16\) 级灰阶,即每个像素的取值范围为十进制 0-15、十六进制 0-F。压缩规则为:统计出每种灰阶的数量,取数量最多的前 \(16\) 种灰阶(如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶值从小到大为序),分别编号 0-F(最多的编号为 0,以此类推)。其他灰阶转换到最近的 \(16\) 种灰阶之一,将某个点的灰阶值(灰度,而非次数)与 \(16\) 种灰阶中的一种相减,绝对值最小即为最近,如果绝对值相等,则编号较小的灰阶更近。

【输入】

输入第 \(1\) 行为一个正整数 \(n(10\le n \le 20)\),表示接下来有 \(n\) 行数据组成一副 \(256\) 级灰阶的灰度图像。

\(2\) 行开始的 \(n\) 行,每行为长度相等且为偶数的字符串,每两个字符用十六进制表示一个像素。约定输入的灰度图像至少有 \(16\) 种灰阶。约定每行最多 \(20\) 个像素。

【输出】

第一行输出压缩选定的 \(16\) 种灰阶的十六进制编码,共计 \(32\) 个字符。

第二行开始的 \(n\) 行,输出压缩后的图像,每个像素一位十六进制数表示压缩后的灰阶值。

【输入样例】

10
00FFCFAB00FFAC09071B5CCFAB76
00AFCBAB11FFAB09981D34CFAF56
01BFCEAB00FFAC0907F25FCFBA65
10FBCBAB11FFAB09981DF4CFCA67
00FFCBFB00FFAC0907A25CCFFC76
00FFCBAB1CFFCB09FC1AC4CFCF67
01FCCBAB00FFAC0F071A54CFBA65
10EFCBAB11FFAB09981B34CFCF67
01FFCBAB00FFAC0F071054CFAC76
1000CBAB11FFAB0A981B84CFCF66

【输出样例】

ABCFFF00CB09AC07101198011B6776FC
321032657CD10E
36409205ACC16D
B41032657FD16D
8F409205ACF14D
324F326570D1FE
3240C245FC411D
BF4032687CD16D
8F409205ACC11D
B240326878D16E
83409205ACE11D

【算法标签】

《洛谷 B3851 图像压缩》 #模拟# #函数与递归# #GESP# #2023#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 500;  // 最大可能的字节模式数量
int n;              // 输入的十六进制字符串数量
int cur;            // 当前不同的字节模式数量
string b[25];       // 存储输入的十六进制字符串
char he[] = {' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};  // 16进制字符映射// 存储字节模式的结构体
struct Node
{string t;  // 字节模式(2个十六进制字符)int num;   // 该模式出现的次数char id;   // 分配给该模式的16进制字符
} a[N];// 比较函数:先按出现次数降序,次数相同按字节模式升序
bool cmp(Node x, Node y)
{if (x.num != y.num) return x.num > y.num;  // 次数多的排前面return x.t < y.t;           // 字典序小的排前面
}/*** 将十六进制字符串转换为十进制数* @param s 2个字符的十六进制字符串* @return 对应的十进制数值*/
int calc(string s)
{int res = 0;for (int i = 0; i < s.size(); i++){if (s[i] <= '9'){res = res * 16 + s[i] - '0';  // 数字字符}else{res = res * 16 + s[i] - 'A' + 10;  // 字母字符A-F}}return res;
}int main()
{// 输入十六进制字符串数量cin >> n;// 处理每个输入的十六进制字符串for (int i = 1; i <= n; i++){cin >> b[i];// 每2个字符作为一个字节模式进行处理for (int j = 0; j < b[i].size() - 1; j += 2){// 提取字节模式(2个字符)string t = "";t += b[i][j];t += b[i][j + 1];// 检查该模式是否已存在bool flag = false;for (int k = 1; k <= cur; k++){if (a[k].t == t){flag = true;a[k].num++;  // 增加出现次数break;}}// 如果不存在,添加到数组中if (!flag){cur++;a[cur].t = t;a[cur].num = 1;}}}// 按出现次数降序排序,次数相同按字典序升序sort(a + 1, a + cur + 1, cmp);// 为前16个最频繁的字节模式分配16进制字符标识for (int i = 1; i <= 16; i++){a[i].id = he[i];  // 使用'0'-'9','A'-'F'}// 为剩余的模式分配标识for (int i = 17; i <= cur; i++){int minj = 1;      // 最相似的模式索引int minn = 1e9;    // 最小差值// 在16个标识模式中寻找最相似的模式for (int j = 1; j <= 16; j++){int t1 = calc(a[j].t);  // 标识模式的数值int t2 = calc(a[i].t);  // 当前模式的数值// 计算数值差值的绝对值if (abs(t1 - t2) < minn){minn = abs(t1 - t2);minj = j;  // 更新最相似模式的索引}}// 分配与最相似模式相同的标识a[i].id = a[minj].id;}// 输出16个标识模式for (int i = 1; i <= 16; i++){cout << a[i].t;}cout << endl;// 输出压缩后的字符串for (int i = 1; i <= n; i++){for (int j = 0; j < b[i].size() - 1; j += 2){// 提取字节模式string t = "";t += b[i][j];t += b[i][j + 1];// 查找对应的标识字符for (int k = 1; k <= cur; k++){if (t == a[k].t){cout << a[k].id;  // 输出标识break;}}}cout << endl;  // 每个原始字符串输出一行}return 0;
}

【运行结果】

10
00FFCFAB00FFAC09071B5CCFAB76
00AFCBAB11FFAB09981D34CFAF56
01BFCEAB00FFAC0907F25FCFBA65
10FBCBAB11FFAB09981DF4CFCA67
00FFCBFB00FFAC0907A25CCFFC76
00FFCBAB1CFFCB09FC1AC4CFCF67
01FCCBAB00FFAC0F071A54CFBA65
10EFCBAB11FFAB09981B34CFCF67
01FFCBAB00FFAC0F071054CFAC76
1000CBAB11FFAB0A981B84CFCF66
ABCFFF00CB09AC07101198011B6776FC
321032657CD10E
36409205ACC16D
B41032657FD16D
8F409205ACF14D
324F326570D1FE
3240C245FC411D
BF4032687CD16D
8F409205ACC11D
B240326878D16E
83409205ACE11D

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

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

相关文章

洛谷 P11606 [PA 2016] 构树 / Reorganizacja - Rye

洛谷 P11606 [PA 2016] 构树 / Reorganizacja构造好题题目传送门 题目大意 有 \(n\) 个节点和 \(m\) 条限制,每条限制形如 \(x,y,T\) 或 \(x,y,N\) 分别表示 \(y\) 一定是 \(x\) 的祖先和 \(y\) 一定不是 \(x\) 的祖先…

CPU占用高排查

top命令,查看占用高的进程id top -p <进程id> -H -H参数显示进程内的线程列表,查看是哪个线程id jstack -p <进程id> | grep <线程id> -C 30 线程id在jdk8可能是16进制需要改下 查看对应线程的堆栈…

GESP认证C++编程真题解析 | 202303 二级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

智能风控平台 scalability 设计:AI应用架构师的经验分享

智能风控平台Scalability设计实战&#xff1a;AI应用架构师的5个核心策略 一、引言&#xff1a;为什么智能风控平台必须重视Scalability&#xff1f; 1. 痛点引入&#xff1a;你是否遇到过这些“崩溃瞬间”&#xff1f; 作为AI应用架构师&#xff0c;我曾亲历某电商平台大促期间…

[豪の算法奇妙冒险] 代码随想录算法训练营第三十一天 | 56-合并区间、738-单调递增的数字

LeetCode56 合并区间、LeetCode738 单调递增的数字代码随想录算法训练营第三十一天 | 56-合并区间、738-单调递增的数字LeetCode56 合并区间题目链接:https://leetcode.cn/problems/merge-intervals/description/ 文章…

MATLAB表格数据处理的项目落地经验(避坑+效率提升)

在科研数据分析、工程测试数据处理、工业报表生成等实际项目中,MATLAB的`readtable()`/`writetable()`及`table`对象操作是高频核心技能。我结合近5年的项目经验(如车载传感器数据解析、光伏实验数据处理、工业Excel…

最新论文 | EarthVL: 武大钟燕飞团队提出渐进式理解/生成框架, 从识别到深度理解遥感地物, 提供专业决策建议 - MKT

最新论文 | EarthVL: 武大钟燕飞团队提出渐进式理解/生成框架, 从识别到深度理解遥感地物, 提供专业决策建议https://mp.weixin.qq.com/s/6gVsTTZ7OT_VT5VcGsiDLA

《卷一》人形机器人导论:从机械设计到系统集成

第1篇 人形机器人的发展与基础认知第1章 人形机器人的发展历史、趋势与应用场景1.1 人形机器人的发展历程1.1.1 早期仿人研究到现代机器人1.1.2 ASIMO等标志性里程碑1.1.3 特斯拉、Figure、Unitree的商业化推动1.2 未来趋势与行业需求1.2.1 具身智能推动的产业变革1.2.2…

Flutter × OpenHarmony 跨端开发之汇率转换与汇率卡片展示

文章目录Flutter OpenHarmony 跨端开发之汇率转换与汇率卡片展示前言背景Flutter Harmony OpenHarmony 跨端开发介绍开发核心代码代码解析&#xff1a;心得总结Flutter OpenHarmony 跨端开发之汇率转换与汇率卡片展示 前言 随着全球化经济的发展&#xff0c;汇率的实时查询…

(1-1)人形机器人的发展历史、趋势与应用场景:人形机器人的发展历程

本章首先系统介绍了人形机器人的发展脉络&#xff0c;从早期仿人研究到ASIMO等里程碑事件&#xff0c;再到特斯拉、Figure、宇树等企业推动的商业化进程&#xff0c;勾勒出人形机器人产业的演进全景。然后进一步分析了具身智能、大模型融合背景下的人形机器人发展趋势及其在劳动…

优雅汇率:Flutter × OpenHarmony 跨端汇率转换计算器实现

文章目录优雅汇率&#xff1a;Flutter OpenHarmony 跨端汇率转换计算器实现前言背景Flutter Harmony OpenHarmony 跨端开发介绍开发核心代码构建转换计算器 Widget核心逻辑解析心得总结优雅汇率&#xff1a;Flutter OpenHarmony 跨端汇率转换计算器实现 前言 随着全球经济…

(1-2)人形机器人的发展历史、趋势与应用场景:未来趋势与行业需求

1.2 未来趋势与行业需求随着具身智能、大模型与机器人核心硬件的快速发展&#xff0c;人形机器人正从技术验证阶段迈向面向真实场景的规模化应用阶段。未来的发展趋势不仅体现在智能水平的持续提升&#xff0c;更体现在对劳动力结构、生产方式与服务形态的深刻重塑。在制造业、…

Flutter × OpenHarmony 汇率转换应用中的智能货币选择器实现

文章目录Flutter OpenHarmony 汇率转换应用中的智能货币选择器实现前言背景Flutter OpenHarmony 跨端开发介绍开发核心代码代码解析心得总结Flutter OpenHarmony 汇率转换应用中的智能货币选择器实现 前言 在现代移动应用中&#xff0c;货币转换功能是出境旅游、跨境电商及…

提示工程质量保证体系:如何保证Prompt的一致性?

提示工程质量保证&#xff1a;构建Prompt一致性的系统方法论 元数据框架 标题&#xff1a;提示工程质量保证&#xff1a;构建Prompt一致性的系统方法论 关键词&#xff1a;提示工程, Prompt一致性, 质量保证体系, 语义对齐, 模型输出稳定性, 反馈迭代, 大模型应用 摘要&#xf…

综述北航基于视觉的无人机定位与导航方法研究 - MKT

综述北航基于视觉的无人机定位与导航方法研究主要贡献全面总结了基于视觉的无人机定位与导航技术,包括图像检索和图像匹配两大类定位方法,以及障碍物检测与规避、路径规划两类导航方法,揭示了现有技术的优势和局限。…

AI原生应用持续学习框架对比:TensorFlow vs PyTorch

AI原生应用持续学习框架对比:TensorFlow vs PyTorch 一、引言 (Introduction) 钩子 (The Hook) 你是否遇到过这样的困境? 花费数周训练的图像分类模型,上线3个月后准确率从92%暴跌至75%——原因是用户上传的图片中出现了新的类别(比如原本识别“猫/狗”,现在多了“仓鼠…

(1-3)人形机器人的发展历史、趋势与应用场景:人形机器人关键技术体系总览

1.3 人形机器人关键技术体系总览人形机器人是一种高度复杂的综合系统&#xff0c;其能力水平取决于多学科关键技术的协同程度。本节从系统工程视角出发&#xff0c;对人形机器人核心技术体系进行整体梳理&#xff1a;以机械系统构建类人结构与运动基础&#xff0c;以电气系统与…

求小数点后某一位数字

求小数点后某一位数字分数a/b化为小数后,小数点后第n位的数字是多少? 【输入】 三个正整数a,b,n 相邻两个数之间用单个空格隔开。0<a<b<100,1<=n<=10000 【输出】 一个数字 错解 #include<iost…

大数据领域中 RabbitMQ 的消息压缩技术

大数据场景下RabbitMQ消息压缩实战:从原理到落地的全攻略 摘要/引言 在大数据时代,高吞吐量、大体积消息已成为RabbitMQ的常见挑战:比如电商系统的交易日志(每条10KB+)、物联网的传感器数据(每秒10万条)、数据同步中的全量备份(单条100KB+)。这些场景下,未压缩的消…

AD域控组策略------禁用所有本地账号,只启用Administrator账号并统一重置密码

powershell脚本代码如下【已在Windows7、Windows10、Windows11系统上测试功能正常】保存为*.ps1文件,组策略中调用此脚本,计算机配置------策略------Windows设置------脚本(启动/关机)------启动中引用脚本即可,…