2026年6月GESP真题及题解(C++三级):加密

在这里插入图片描述

题目描述

小杨同学有一串数字,想把它们变成另一串数字,这个过程叫做加密

他有一本密码本,密码本告诉你:每个数字应该变成哪个数字。

数字一共有 10 10 10 个: 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9

密码本会依次告诉你:

  • 0 0 0 要变成什么
  • 1 1 1 要变成什么
  • 2 2 2 要变成什么
  • ……
  • 9 9 9 要变成什么

请你按照密码本,把原来的每个数字都换成新的数字,然后输出。

输入格式

输入共有 3 3 3 行。

第一行:一个整数,表示有多少个数字需要加密;

第二行:这些需要加密的数字;

第三行:密码本,一共 10 10 10 个数字。

10 10 10 个数字的意思是:

  • 1 1 1 个数字:表示 0 0 0 加密后变成什么;
  • 2 2 2 个数字:表示 1 1 1 加密后变成什么;
  • 3 3 3 个数字:表示 2 2 2 加密后变成什么;
  • ……
  • 10 10 10 个数字:表示 9 9 9 加密后变成什么。
输出格式

输出加密后的数字。

也就是:把输入第二行里的每个数字,都按照输入第三行的密码本换掉后输出。

输入输出样例 1
输入 1
7
0 2 0 3 4 1 9
9 0 1 2 3 4 5 6 7 8
输出 1
9 1 9 2 3 0 8
说明/提示

第二行要加密的数字是:
0   2   0   3   4   1   9 0 \ 2 \ 0 \ 3 \ 4 \ 1 \ 9 0 2 0 3 4 1 9

第三行密码本是:
9   0   1   2   3   4   5   6   7   8 9 \ 0 \ 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 9 0 1 2 3 4 5 6 7 8

它的意思是:

  • 0 0 0 变成 9 9 9
  • 1 1 1 变成 0 0 0
  • 2 2 2 变成 1 1 1
  • 3 3 3 变成 2 2 2
  • 4 4 4 变成 3 3 3
  • 5 5 5 变成 4 4 4
  • 6 6 6 变成 5 5 5
  • 7 7 7 变成 6 6 6
  • 8 8 8 变成 7 7 7
  • 9 9 9 变成 8 8 8

所以:

  • 0 0 0 变成 9 9 9
  • 2 2 2 变成 1 1 1
  • 0 0 0 变成 9 9 9
  • 3 3 3 变成 2 2 2
  • 4 4 4 变成 3 3 3
  • 1 1 1 变成 0 0 0
  • 9 9 9 变成 8 8 8

最后得到:
9   1   9   2   3   0   8 9 \ 1 \ 9 \ 2 \ 3 \ 0 \ 8 9 1 9 2 3 0 8

数据范围

需要加密的数字个数不超过 20000 20000 20000 个,且均为 0 0 0 9 9 9;密码本中的数字不重复,且均为 0 0 0 9 9 9

思路分析

本题核心是查表映射

  • 输入一个整数 n,表示需要加密的数字个数。
  • 读取 n 个数字(每个都是 0~9),存入数组 a
  • 读取 10 个数字作为密码本,存入数组 p,其中 p[i] 表示数字 i 加密后的结果。
  • 对每个原始数字 a[i],将其替换为 p[a[i]] 并输出。

复杂度:时间 O(n),空间 O(n)(存储原始数字,n≤20000)。


代码实现

#include<bits/stdc++.h> 
using namespace std;
int n,a[20010]; //原始序列
int p[10]; // 密码本
int main(){
    cin>>n; 
    for(int i=1;i<=n;i++) cin>>a[i]; // 读入原始序列
    for(int i=0;i<=9;i++) cin>>p[i]; // p[i]表示i变成什么
    
    for(int i=1;i<=n;i++){ // 遍历每个原始数字
        cout<<p[a[i]]<<" "; // 输出加密后的数字
    }
    
    return 0;
}

功能分析

  • 输入处理:使用 cin 连续读取,忽略空白符,正确获取全部数据。
  • 映射存储:密码本数组 p 下标对应原数字,值对应加密后数字,映射关系清晰。
  • 输出转换:依次通过 p[a[i]] 得到新数字并输出。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

在这里插入图片描述

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转
在这里插入图片描述
https://edu.csdn.net/course/detail/41081 点击跳转
在这里插入图片描述

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

在这里插入图片描述

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

在这里插入图片描述

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

在这里插入图片描述
GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐