华为OD机试 - 字符串加密(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给你一串未加密的字符串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。

二、输入描述

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

三、输出描述

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

四、解题思路

题目很简单,多读几遍,其义自见。

我的做题思路是:

  1. 先找出最长的字符串,初始化偏移量集合numList,比如[1,2,4,7,13];
  2. 遍历每一个输入的字符串,获取每一个字符,按照题目规则,进行偏移即可;
  3. 核心算法:若z+1则结果为a;

五、Java算法源码

package com.guor.od;import java.util.*;/*** 每一个字母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]。* <p>* 例如:原文 abcde 加密后 bdgkr,其中偏移量分别是1,2,4,7,13。*/
public class OdTest01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = Integer.parseInt(scanner.nextLine());ArrayList<String> strList = new ArrayList<>();// 输入行字符串的最大长度,用于初始化最大偏移量集合int maxLength = 0;// 初始化数据for (int i = 0; i < n; i++) {System.out.println("请输入第" + (i + 1) + "个字符:");String line = scanner.nextLine();strList.add(line);if (line.length() > maxLength) {maxLength = line.length();}}// 偏移量集合List<Integer> numList = getNumList(maxLength);for (int i = 0; i < strList.size(); i++) {// 每一行字符串的每一个字符集合char[] charArr = strList.get(i).toCharArray();// 偏移之后的字符串StringBuilder builder = new StringBuilder();for (int j = 0; j < charArr.length; j++) {int index = charArr[j];index = index + numList.get(j);// 核心算法:若z+1则结果为aif(index > (int) 'z'){int preA = (int) 'a'-1;index = index % (int) 'z' + preA;}builder.append((char) index);}System.out.println(builder.toString());}}/*** 初始化最大偏移量集合* @param maxLength 最大偏移量*/private static List<Integer> getNumList(int maxLength) {List<Integer> numList = new ArrayList<>();numList.add(1);numList.add(2);numList.add(4);if (maxLength <= 3) {return numList;}// 当i>=3时,数组元素a[i]=a[i-1]+a[i-2]+a[i-3]。for (int i = 3; i < maxLength; i++) {numList.add(numList.get(i - 1)+ numList.get(i - 2) + numList.get(i - 3));}return numList;}
}

六、效果展示

1、输入

3
xyz
xyza
xyzab

2、输出

yad
yadh
yadho

3、说明

获取3个字符串最大长度maxLength = 5。

偏移量集合规则:

  • 数组a前三位已经赋值:a[0]=1,a[1]=2,a[2]=4。
  • 当i>=3时,数组元素a[i]=a[i-1]+a[i-2]+a[i-3]。

初始化偏移集合[1,2,4,7,13]

  1. 第二个字符串xyz
    • 第一个字符x偏移量是1,即为y;
    • 第二个字符y偏移量是2,即为a;
    • 第三个字符z偏移量是4,即为d;
    • 故输出yad;
  2. 第二个字符串xyza
    • 第一个字符x偏移量是1,即为y;
    • 第二个字符y偏移量是2,即为a;
    • 第三个字符z偏移量是4,即为d;
    • 第四个字符a偏移量是7,即为h;
    • 故输出yadh;
  3. 第三个字符串xyzab
    • 第一个字符x偏移量是1,即为y;
    • 第二个字符y偏移量是2,即为a;
    • 第三个字符z偏移量是4,即为d;
    • 第四个字符a偏移量是7,即为h;
    • 第五个字符b偏移量是13,即为o;
    • 故输出yadho;

很简单,但是有点繁琐。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

算法分析与设计编程题 贪心算法

活动安排问题 题目描述 解题代码 vector<bool> greedySelector(vector<vector<int>>& intervals) {int n intervals.size();// 将活动区间按结束时间的从小到大排序auto cmp [](vector<int>& interval1, vector<int>& interval2…

【LeetCode-中等题】78. 子集

文章目录 组合并集问题汇总&#xff1a;题目方法一&#xff1a;动态规划方法二&#xff1a;递归加回溯(关键----startIndex) 组合并集问题汇总&#xff1a; 1、子集去重版本 2、组合非去重版本 3、组合去重版本 题目 注意&#xff1a;这里的nums数组里面的元素是各不相同的&a…

SpringBoot2.0(Lombok,SpringBoot统一返回封装)

目录 一&#xff0c;Lombok简介二&#xff0c;添加依赖三&#xff0c;Springboot统一返回封装3.1&#xff0c;创建一个工具包util和一个JsonData类 四&#xff0c;示例实体类五&#xff0c;Data注解 一&#xff0c;Lombok简介 ​ java工程中&#xff0c;我们要创建很多的java B…

SpringCloud(17~21章):Alibaba入门简介、Nacos服务注册和配置中心、Sentinel实现熔断与限流、Seata处理分布式事务

17 SpringCloud Alibaba入门简介 17.1 why会出现SpringCloud alibaba Spring Cloud Netflix项目进入维护模式 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now 说明 Spring Cloud Netflix Projects Entering Maintenance Mode 什么是维护模…

【GO语言基础】前言

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录一、基础知识包和函数函数声明语法简洁性 括号成对出现GO常用DOS命令命名规则项目目录结构注释 总结 一、基础知识 包和函数 //声明本代…

记一次线程堵塞(挂起)导致消息队列积压

1 背景 A服务作为生产者&#xff0c;每天发送上千万的mq消息&#xff0c;每一个消息包含500个用户ids数据。B服务作为消费者&#xff0c;接受MQ消息并通过http调用第三方请求进行业务处理&#xff0c;消费组启用了rabbitmq的多线程消费组&#xff0c;一个实例并发40个mq消费者…

企业如何高效平滑迁移数据?火山引擎DataLeap上线整库搬迁解决方案

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎大数据研发治理套件DataLeap上线整库搬迁解决方案&#xff0c;包括整库离线同步、整库实时同步两大能力&#xff0c;大大提升数据上云便捷…

C++项目实战——基于多设计模式下的同步异步日志系统-⑤-实用工具类设计

文章目录 专栏导读获取系统时间time介绍 getTime函数设计判断文件是否存在stat介绍exists函数设计 获取文件所在路径find_last_of介绍path函数设计 创建文件所在目录mkdir介绍find_first_of介绍函数createDirectory设计 实用工具类整理 专栏导读 &#x1f338;作者简介&#xf…

图论第三天|130. 被围绕的区域、417. 太平洋大西洋水流问题、827. 最大人工岛

130. 被围绕的区域 文档讲解 &#xff1a;代码随想录 - 130. 被围绕的区域 状态&#xff1a;开始学习。 思路&#xff1a; 步骤一&#xff1a; 深搜或者广搜将地图周边的 ‘O’ 全部改成 ’A’&#xff0c;如图所示&#xff1a; 步骤二&#xff1a; 再遍历地图&#xff0c;将 …

(3)MyBatis-Plus待开发

常用注解 TableName MyBatis-Plus在确定操作的表时&#xff0c;由BaseMapper的泛型决定即实体类型决定&#xff0c;且默认操作的表名和实体类型的类名一致,如果不一致则会因找不到表报异常 //向表中插入一条数据 Test public void testInsert(){User user new User(null, &…

基因型数据VCF转EXCEL亲测好用

import pandas as pd df pd.read_csv(shuju.vcf, sep\t, comment#, headerNone,encodingutf-8) df.to_excel(outputFile2.xlsx, indexFalse,encodingutf-8) 以上就是转成功的截图&#xff0c;需要注意的是一定要写入编码方式&#xff0c;UTF-8 &#xff0c;第一次我没有写编码…

Zabbix“专家坐诊”第203期问答汇总

问题一 Q&#xff1a;用的模板&#xff0c;没用创建动作&#xff0c;但是触发器触发了我钉钉直接被通知了&#xff0c;怎么取消模板自带的动作&#xff1f; A&#xff1a;没有动作是不会触发事件告警的 &#xff0c;确定是从这个平台推出的钉钉消息&#xff1f;或者看下zabbix…