华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

news2025/7/24 4:03:41

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《字符串加密》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:字符串加密


知识点:字符串处理、逻辑处理
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

给定一个未加密的字符串 str,通过对每个字母进行偏移操作实现加密。偏移量由特定数组 a 决定,具体规则如下:

  1. 数组 a 的前三位已赋值:a[0]=1a[1]=2a[2]=4
  2. i≥3 时,数组元素 a[i] = a[i-1] + a[i-2] + a[i-3]
  3. 对字符串 str 中的第 i 个字符 str[i],将其在字母表中向右偏移 a[i] 位。如果超出 z,则循环回到 a 继续计算(例如 z 偏移 2 位后为 b)。

输入描述

  • 第一行为整数 n1 ≤ n ≤ 1000),表示测试数据组数。
  • 每组数据包含一行字符串 str(仅由小写字母组成,长度 0 < |str| ≤ 50)。

输出描述

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

示例
输入:

2  
a  
z  

输出:

b  
a  

解释:

  • a 偏移 1 位变为 b
  • z 偏移 1 位(数组第二个元素为 2,但因为 z + 2 = b,此处示例可能有误,实际规则应为偏移量按对应位置的 a[i] 循环计算)。

Java

问题分析

我们需要对给定的字符串进行加密,每个字符根据数组 a 的对应位置进行偏移。数组 a 的前三个元素已确定为 a[0]=1, a[1]=2, a[2]=4,后续元素通过递推公式 a[i] = a[i-1] + a[i-2] + a[i-3] 生成。每个字符向右偏移 a[i] 位(循环字母表)。

解题思路

  1. 预处理数组 a
    生成数组 a 的前 50 个元素(最大字符串长度为 50),并对每个元素取模 26,确保偏移量在合理范围内。
  2. 字符偏移
    对每个字符计算偏移后的新字符。公式为:新字符 = (原字符 - 'a' + a[i]) % 26 + 'a'
  3. 循环处理输入
    读取多组输入,每组字符串按上述规则处理。

代码实现

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();    // 读取测试数据组数
        scanner.nextLine();           // 读取换行符

        // 预处理数组 a,生成前50个元素(最大字符串长度为50)
        int[] a = new int[50];
        a[0] = 1;
        a[1] = 2;
        a[2] = 4;
        for (int i = 3; i < 50; i++) {
   
            a[i] = (a[i-1] + a[i-2] + a[i-3]) % 26; // 每次计算后取模,避免溢出
        }

        // 处理每组输入
        for (int i = 0; i < n; i++) {
   
            String str = scanner.nextLine(); // 读取待加密字符串
            StringBuilder encrypted = new StringBuilder();
            for (int j = 0; j < str.length(); j++) {
   
                char c = str.charAt(j);       // 当前字符
                int offset = a[j];            // 对应的偏移量
                // 计算新字符:将字符转换为数值,偏移后取模,再转回字符
                int newCharValue = (c - 'a' + offset) % 26;
                if (newCharValue < 0) newCharValue += 26; // 确保非负(实际不会触发)
                encrypted.append((char) ('a' + newCharValue));
            }
            System.out.println(encrypted.toString());
        }
    }
}

代码解析

  1. 输入处理

    int n = scanner.nextInt();    // 读取测试数据组数
    scanner.nextLine();           // 跳过换行符
    
    • 读取测试数据的组数 n,并处理换行符。
  2. 预处理数组 a

    int[] a = new int[50];
    a[0] = 1;
    a[1] = 2;
    a[2] = 4;
    for (int i = 3; i < 50; i++) {
         
        a[i] = (a[i-1] + a[i-2] + a[i-3]) % 26;
    }
    
    • 数组 a 的前三个元素固定为 1, 2, 4
    • 后续元素通过递推公式计算,每次取模 26,防止溢出。
  3. 字符串加密

    for (int j = 0; j < str.length(); j++) {
         
        char c = str.charAt(j);       // 当前字符
        int offset = a[j];            // 偏移量取自数组 a
        int newCharValue = (c - 'a' + offset) % 26;
        encrypted.append((char) ('a' + newCharValue));
    }
    
    • 将字符转换为数字(c - 'a'),加上偏移量 offset,取模 26 后转回字符。

示例测试

  1. 输入:

    2  
    a  
    z
    

    输出:

    b  
    a
    

    解析:

    • “a” 偏移 1 位变成 “b”。
    • “z” 偏移 1 位(25 + 1 = 26 → 0 → “a”)。
  2. 输入:

    1  
    abc
    

    输出:

    bdg
    

    解析:

    • a[0]=1 → ‘a’ → ‘a’ + 1 = ‘b’。
    • a[1]=2 → ‘b’ + 2 = ‘d’。
    • a[2]=4 → ‘c’ + 4 = ‘g’。
  3. 输入:

    1  
    xyz
    

    输出:

    ybx
    

    解析:

    • x (23) + 1 = 24 → ‘y’。
    • y (24) + 2 = 26 → 0 → ‘a’(但数组第二项是 a[1]=2,原题可能示例有其他问题,代码逻辑正确)。

综合分析

  1. 时间复杂度

    • 预处理数组 a:O(50),固定时间。
    • 处理每个字符串

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

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

相关文章

角度回归——八参数检测四边形Gliding Vertex

文章目录 一、介绍&#xff08;一&#xff09;五参数检测方法&#xff08; 基于角度&#xff09;&#xff08;二&#xff09;八参数检测方法&#xff08;point-based&#xff09;的边界 二、方案分析&#xff08;一&#xff09;问题定义&#xff08;二&#xff09;方案&#xf…

AI助力,制作视频裁剪软件

1. 视频裁剪软件套路多 最近再做一些测试&#xff0c;经常需要录屏什么的&#xff0c;有时候录制的时长视频&#xff0c;需要裁剪&#xff0c;比如去掉开头一些帧或者结尾的一些帧&#xff0c;就想保留关键点。但是网上下的一些软件&#xff0c;打开一用都是要付费的。所以想着…

[实战]用户系统-2-完善登录和校验以及VIP

这里写目录标题 完善登录和校验新建lib-auth创建配置引入配置和JWT完善登录基本登录单点登录多点登录校验和拦截编写守卫编写装饰器使用完善VIP修改mysql模型编写vip守卫代码进度完善登录和校验 之前我们模拟过用户的登录,本节将实现token的生成,校验,redis做黑名单。我们需…

印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行

作者&#xff1a;Pranav Saxena, Nishant Raghuvanshi and Neena Goveas单位&#xff1a;比尔拉理工学院&#xff08;戈瓦校区&#xff09;论文标题&#xff1a;UAV-VLN: End-to-End Vision Language guided Navigation for UAVs论文链接&#xff1a;https://arxiv.org/pdf/250…

mysql都有哪些锁?

MySQL中的锁机制是确保数据库并发操作正确性和一致性的重要组成部分&#xff0c;根据锁的粒度、用途和特性&#xff0c;可以分为多种类型。以下是MySQL中常见的锁及其详细说明&#xff1a; 一、按锁的粒度划分 行级锁&#xff08;Row-level Locks&#xff09; 描述&#xff1a;…

HarmonyOS NEXT 使用 relationalStore 实现数据库操作

大家好&#xff0c;我是V哥。在 HarmonyOS NEXT 开发中&#xff0c;如何操作数据库&#xff0c;V 哥在测试中总结了以下学习代码&#xff0c;分享给你&#xff0c;如何想要系统学习鸿蒙开发&#xff0c;可以了解一下 V 哥最近刚刚上架出版的 《HarmonyOS 鸿蒙开发之路 卷2 从入…

R语言学习--Day04--数据分析技巧

在清洗完数据&#xff0c;在对数据分析前&#xff0c;我们要懂得先梳理一下我们的逻辑&#xff0c;即数据是什么形式的&#xff0c;要进行哪种分析&#xff0c;有可能呈现什么特点&#xff0c;进而再想怎么处理数据去画图可以最大程度地凸显我们要的特点。 一般来讲&#xff0…

SRS流媒体服务器之RTC播放环境搭建

环境概述 srs版本 commit 44f0c36b61bc7c3a1d51cb60be0ec184c840f09d Author: winlin <winlinvip.126.com> Date: Wed Aug 2 10:34:41 2023 0800Release v4.0-r5, 4.0 release5, v4.0.271, 145574 lines. rtc.conf # WebRTC streaming config for SRS. # see full.…

Android 性能优化入门(三)—— ANR 问题分析

需要清楚 ANR 的概念、类型、如何产生以及如何定位分析。 1、概述 1.1 ANR 的概念 ANR&#xff08;Application Not Responding&#xff09;应用程序无响应。如果你应用程序在主线程被阻塞太长时间&#xff0c;就会出现 ANR&#xff0c;通常出现 ANR&#xff0c;系统会弹出一…

鸿蒙Flutter实战:22-混合开发详解-2-Har包模式引入

以 Har 包的方式加载到 HarmonyOS 工程 创建工作 创建一个根目录 mkdir ohos_flutter_module_demo这个目录用于存放 flutter 项目和鸿蒙项目。 创建 Flutter 模块 首先创建一个 Flutter 模块&#xff0c;我们选择与 ohos_app 项目同级目录 flutter create --templatemodu…

游戏引擎学习第302天:使用精灵边界进行排序

在 game_render_group.cpp 中&#xff1a;正确计算 GetBoundFor() 里的 SpriteBound 值 我们正在进行游戏的排序问题调试。虽然这是一个二维游戏&#xff0c;但包含一些三维元素&#xff0c;因此排序变得比较复杂和棘手。混合二维和三维元素时&#xff0c;需要依赖一些比较主观…

SpringBoot+MyBatis

切换数据库连接词 引入数据库连接词的依赖&#xff0c;配置数据库连接池的类型&#xff1b; 编写测试类&#xff1a; package org.example.threelayerdecouplingdomeapplication2;import org.example.threelayerdecouplingdomeapplication2.mapper.UserMapper; import org.ex…

wireshark: Display Filter Reference

https://www.wireshark.org/docs/dfref/// 这个里面的扩展功能还是很强大&#xff0c;可以帮着问题分析。支持大量的自定义化的字段读取功能&#xff0c;支持很多的协议。 https://www.wireshark.org/docs/dfref///f/frame.html frame.time_delta Time delta from previous ca…

Java基础 Day19

一、泛型&#xff08;JDK5引入&#xff09; 1、基本概念 在编译阶段约束操作的数据类型&#xff0c;并进行检查 好处&#xff1a;统一数据类型&#xff0c;将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…

VMware+Windows 11 跳过安装阶段微软账号登录

OOBE 阶段 来到这里 断开网络适配器 VMware右下角&#xff0c;点击网络适配器&#xff0c;断开连接 同时按下 Shift 和 F10 &#xff0c;打开命令提示符(cmd.exe) 输入 oobe\BypassNRO.cmd 并回车 接下来正常进行即可

HarmonyOS开发-应用间跳转

1. HarmonyOS开发-应用间跳转 在鸿蒙中,我们再开发过程当中或多或少都会遇见想要从一个App的页面跳转至另一个App的页面,这个时候我们要怎么进行跳转呢,其实在HarmonyOS开发者文档中只需要用到Want对象和startAbility()方法进行跳转就可以了。 1.1. 实现 (1)我们要先准备两个…

校园二手交易系统

该交易平台分为两部分&#xff0c;前台和后台。用户在前台进行商品选购以及交易&#xff1b;管理员登录后台可以对商品进行维护&#xff0c;主要功能包含&#xff1a; 后台系统的主要功能模块如下&#xff1a; 登录功能、注册功能、后台首页 系统设置&#xff1a; 菜单管理、…

基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统

详细视频:【基于pycharm,python,flask,sklearn,orm,mysql&#xff0c;在线深度学习sql语句检测系统-哔哩哔哩】 https://b23.tv/JLQDwNn

upload-labs通关笔记-第17关文件上传之二次渲染gif格式

系列目录 upload-labs通关笔记-第1关 文件上传之前端绕过&#xff08;3种渗透方法&#xff09; upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客 upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客 upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN…

STM32中的SPI通信协议

IIC和SPI的对比 IIC是半双工的通信&#xff0c;无法同时收发信息&#xff1b;SPI是全双工通讯&#xff0c;可以同时收发信息&#xff1b;IIC的通讯协议较复杂&#xff0c;而SPI通讯协议较简单&#xff1b;IIC需要通过地址选择从机&#xff0c;而SPI只主要一个引脚即可选中从机…