【华为上机真题 2022】字符串加密

news2024/11/27 0:38:32

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 测试样例

1.3.1 示例 1

1.3.2 示例 2

二、解题思路

三、代码实现

四、时间复杂度



注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!

一、题目描述

给你一串未加密的字符串 str,通过对字符串的每一个字母进行改变来实现加密,加密方式是在每一个字母 str[i] 偏移特定数组元素 a[i] 的量,数组 a 前三位已经赋值:a[0] = 1, a[1] = 2, a[2] = 4。当 i > = 3 时,数组元素 a[i] = a[i-1] + a[i-2] + a[i-3]。

例如:原文 abcde 加密后 bdgkr,其中偏移量分别是1, 2, 4, 7, 13。

1.1 输入描述

第一行为一个整数 n(1 <= n <= 1000),表示有n组测试数据,每组数据包含一行,原文 str(只含有小写字母,0< 长度 <= 50)。

1.2 输出描述

每组测试数据输出一行,表示字符串的密文

1.3 测试样例

1.3.1 示例 1

输入

1
xy

输出

ya

说明:第一个字符 x 偏移量是 1,即为 y,第二个字符 y 偏移量是 2,即为 a。

1.3.2 示例 2

输入

2
xy
abcde

输出

ya
bdgkr

说明:第二行输出字符偏移量分别是1,2,4,7,13

备注:解答要求 时间限制:2000ms,内存限制:64MB

二、解题思路

本题比较简单,通过公式 a[i] = a[i-1] + a[i-2] + a[i-3] 计算当前元素的偏移量,计算出偏移量后需要对 26 取余,假设当前元素的偏移量为 x,那么当前元素偏移后新的加密元素为:

str[i] = 'a' + ((str[i] - 'a') + x) % 26;

三、代码实现

代码实现如下所示。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n;
    while (cin>>n) {
        string str;
        int a = 1, b = 2, c = 4;
        for (int i = 0; i < n; ++i) {
            cin>>str;
            for (int j = 0; j < (int)str.size(); ++j) {
                int curt;
                if (j == 0) {
                    curt = a;
                } else if (j == 1) {
                    curt = b;
                } else if (j == 2) {
                    curt = c;
                } else {
                    curt = (a + b + c)%26;
                    a = b;
                    b = c;
                    c = curt;
                }
                str[j] = 'a' + ((str[j] - 'a') + curt)%26;
            }
            cout<<str<<endl;
        }
    }
    return 0;
}

在上述代码中,只需要计算当前需要偏移的数量,偏移后需要对 26 (小写字母 26 个)取余即可计算出偏移后的位置。

四、时间复杂度

时间复杂度:O(n)

其中,n 表示字符串的长度,在上述代码中,只需要遍历一次即可完成字符串的加密,所以时间复杂度为 O(n)。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


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

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

相关文章

【Linux】基本指令(三)

文章目录sort 指令find 指令which 指令alias 指令grep 指令top 指令zip/unzip指令tar 指令bc 指令unname 指令history 指令shutdown 指令热键补充sort 指令 &#x1f495; Linux sort 命令用于将文本文件内容加以排序并且可针对文本文件的内容&#xff0c;以行为单位来排序。 …

03 探究Kubernetes工作机制的奥秘

自动化的运维管理&#xff1a;探究Kubernetes工作机制的奥秘 文章目录1. 云计算时代的操作系统2. kubernets 的基本架构3.节点内部的结构3.1 master 节点3.2 node 节点4. Kubernetes 的大致工作流程5.插件有哪些&#xff1f;5.1 重要的插件6. kubernetes 架构思维导图7. 思考的…

制作一个简单HTML校园网页(HTML+CSS)学校网站制作 校园网站设计与实现

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

RabbitMQ工作队列

工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务&#xff0c;而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时&#xff0c;这些工作线程将一起处…

电商购物平台的不断完善

目录 1.java编译环境的创建&#xff0c;与所需要用到的插件 第一个电商平台 1.初步思路&#xff1a; 2.确定java类 3.源码分析 成果&#xff1a; 第二个电商购物平台 代码&#xff1a; 最终的成果&#xff1a; 1.java编译环境的创建&#xff0c;与所需要用到的插件 (1…

链夹式烟苗注水移栽机的总体设计

目 录 1 引言 1 1.1课题来源及研究的目的和意义 1 1.2农艺要求 1 1.3链夹式烟苗注水移栽机的发展现状 1 1.4研究内容 3 2 链夹式烟苗注水移栽机的设计方案 4 2.1链夹式烟苗注水移栽机总体方案设计思路 4 2.2链夹式烟苗注水移栽机工作原理 5 3 链夹式烟苗注水移栽机具体设计 6 3…

带你入门HTML+CSS网页设计,编写网页代码的思路

带你入门HTMLCSS网页设计&#xff0c;编写网页代码的思路 这篇文章主要给大家详细解释一下这些代码的作用和意义&#xff0c;以及编写网页代码的格式与思路。 下面我贴上html代码&#xff1a; <!--HTML--> <div> <h2>这是我的第一个网页</h2> <p&…

Metabase学习教程:仪表盘-3

自定义联动&#xff1a;选择当人们单击仪表盘中的图表时会发生什么 您可以设置仪表盘部件以将用户导航到仪表盘、保存的问题和URL&#xff0c;并使用仪表盘中的值更新目标仪表盘的筛选器&#xff0c;或参数化指向外部站点的链接。 Metabase提供了一些简单的构建块&#xff0c…

谷粒学院——Day08【课程发布-课程大纲和课程发布】

富文本编辑器Tinymce 一、Tinymce可视化编辑器 参考 https://panjiachen.gitee.io/vue-element-admin/#/components/tinymce https://panjiachen.gitee.io/vue-element-admin/#/example/create 二、组件初始化 Tinymce是一个传统javascript插件&#xff0c;默认不能用于V…

MySQL安装部署

1、卸载mariadb 查看是否有默认的mariadbrpm -qa|grep mariadb 如果有&#xff0c;卸载rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64&#xff0c;然后删除etc目录下的my.cnfrm -rf /etc/my.cnf&#xff08;注意这里需要确定tar包里是否有默认的cnf文件&#xff0c;在su…

NLP实践!文本语法纠错模型实战,搭建你的贴身语法修改小助手 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 深度学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/42 &#x1f4d8; 自然语言处理实战系列&#xff1a;https://www.showmeai.tech/tutorials/45 &#x1f4d8; 本文地址&#xff1a;https://sho…

AI智能机器人的测评以及部署

作为业内人士&#xff0c;今天给大家测评下电销机器人。究竟是什么样的电销机器人才是让客户满意的&#xff1f; 咱们先来说说电销机器人到底是什么&#xff1f; 相信很多人都对电销机器人没有过多的了解。甚至还有人会问&#xff1b;“什么&#xff1f;机器人&#xff1f;啥样…

两万字详细解读AQS,你真的了解它吗?

1、JUC的由来 synchronized 关键字是JDK官方人员用C代码写的&#xff0c;在JDK6以前是重量级锁。Java大牛 Doug Lea对 synchronized 在并发编程条件下的性能表现不满意就自己写了个JUC&#xff0c;以此来提升并发性能&#xff0c;本文要讲的就是JUC并发包下的AbstractQueuedSy…

Listen、Attention、Spell模型

LAS是一个做语音识别的经典seq2seq模型&#xff0c;主要分为三个部分Listen、Attention、Spell Listen Listen部分就是一个encoder。 输入声学特征向量&#xff0c;提取信息、消除噪声&#xff0c;输出向量。 encoder可以是RNN 也可以是CNN。比较常见的是先用CNN&#xff0…

第三章变量

第三章变量 查看javaAPI文档的网址&#xff1a; https://www.matools.com/ 3.1程序中号的使用 1&#xff09;当左右两边都是数值型时&#xff0c;则做加法运算 2&#xff09;当左右两边有一方为字符串&#xff0c;则做拼接运算 3&#xff09;运算顺序从左到右 System,out.prin…

Springboot+vue校园新闻网站idea

将系统需求进行分析总结&#xff0c;系统需求如下&#xff1a; 系统可以运行在Windows操作系统平台上&#xff0c;并通过友好的界面进行管理 系统用户分为游客&#xff0c;登录用户&#xff0c;管理员 游客可以浏览新闻 游客可以浏览评论 管理员具有用户所有的权限 管理员还可以…

别再把Tableau、PowerBI吹上天了,在中国根本用不起来,看看为啥

工作业务相关&#xff0c;这几年接触BI较多&#xff0c;借此浅聊下我对BI工具以及市场的看法&#xff0c;原创禁止转载。 1、BI并不玄乎&#xff0c;本质就是实现简单数据分析和可视化的工具 很多人觉得BI玄乎&#xff0c;其实很大程度是因为BI厂家给造的名词太多了&#xff…

Ajax学习:如何在Chrome网络控制台查看通信报文(请求报文/响应报文)

第一步&#xff1a;F12开启控制台&#xff0c; 第二步骤&#xff1a;打开网络标签 然后刷新页面 在网络标签位置处&#xff0c;这时候会出现所有发送的请求 点击第一个&#xff1a;会出现内容 预览部分:是解析 观察解析结果处 标头headers:主要观察请求头和请求体部分 GET请…

saltstack 企业级实战

一、自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务。 但是,如果许多服务器需要安装相同或相似的软件和配置,则该过程将需要大量的工时才能完成,这会耗尽您本已紧张的资源。如果没有某种形式的自动化,这项任务几乎无法完成。考虑到这一任务,开发了新…

【SpringCloud】06 链路跟踪 Sleuth+zipkin

链路追踪 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多微服务。这些模块负责不同的功能&#xff0c;组合成系统&#xff0c;最终可以提供丰富的功能。在这种架构中&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上&#xf…