【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 密码解密(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1063

🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

文章目录

🍏 密码解密

问题描述

LYA 收到了一段加密后的字符串 s s s,这段字符串是通过一个特殊的 "密码本" 加密的。"密码本" 的映射规则如下:字母 ′ a ′ 'a' ′a′ 到 ′ i ′ 'i' ′i′ 分别用数字 ′ 1 ′ '1' ′1′ 到 ′ 9 ′ '9' ′9′ 表示;字母 ′ j ′ 'j' ′j′ 到 ′ z ′ 'z' ′z′ 分别用 ′ 10 ∗ ′ '10*' ′10∗′ 到 ′ 26 ∗ ′ '26*' ′26∗′ 表示。现在 LYA 需要你的帮助,将这段 "密文" 解密并输出明文。

注意:映射规则保证是唯一的,即每个字母只会被映射到唯一的数字或数字+星号的组合。

输入格式

输入一行,包含一个字符串 s s s,表示 LYA 收到的 "密文"。

输出格式

输出一行,包含一个字符串,表示解密后的明文。

样例输入

复制代码
20*19*20*

样例输出

复制代码
tst

数据范围

  • 解密后的明文长度不超过 100 100 100。

题解

本题可以通过 "密码本" 的映射规则,将 "密文" 中的数字或数字+星号的组合替换成对应的字母即可。

具体步骤如下:

  1. 从 26 26 26 到 1 1 1 遍历每个数字 i i i:

    • 如果 i > 9 i>9 i>9,则将 i + " ∗ " i+"*" i+"∗" 替换成字符 ( c h a r ) ( ′ a ′ + i − 1 ) (char)('a'+i-1) (char)(′a′+i−1);
    • 否则,将 i i i 替换成字符 ( c h a r ) ( ′ a ′ + i − 1 ) (char)('a'+i-1) (char)(′a′+i−1)。
  2. 输出替换后的字符串即为解密后的明文。

时间复杂度 O ( ∣ s ∣ ) O(|s|) O(∣s∣),空间复杂度 O ( ∣ s ∣ ) O(|s|) O(∣s∣)。其中 ∣ s ∣ |s| ∣s∣ 为字符串 s s s 的长度。

参考代码

  • Python
python 复制代码
s = input()

for i in range(26, 0, -1):
    key = str(i) + ('*' if i > 9 else '')
    val = chr(ord('a') + i - 1)
    s = s.replace(key, val)

print(s)
  • Java
java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();

        for (int i = 26; i >= 1; i--) {
            String key = i + (i > 9 ? "*" : "");
            char val = (char) ('a' + i - 1);
            s = s.replace(key, String.valueOf(val));
        }

        System.out.println(s);
    }
}
  • Cpp
cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    string s;
    cin >> s;

    for (int i = 26; i >= 1; i--) {
        string key = to_string(i) + (i > 9 ? "*" : "");
        char val = 'a' + i - 1;
        for (int j = 0; j < s.length(); j++) {
            if (s.substr(j, key.length()) == key) {
                s.replace(j, key.length(), 1, val);
            }
        }
    }

    cout << s << endl;

    return 0;
}
相关推荐
宿州派大星2 小时前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
承渊政道3 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
Joy T5 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383008 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·8 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真8 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes9 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停9 小时前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云10 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook10 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy