返回目录
题目描述
给定一段“密文”字符串 s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。
映射的规则(‘a’ \~ ‘i’)分别用(‘1’ \~ ‘9’)表示;(‘j’ \~ ‘z’)分别用(“10*” \~ “26*”)表示。
约束:映射始终唯一。
输入描述
“密文”字符串
输出描述
明文字符串
备注:翻译后的文本长度在100以内
示例:
输入 | 20*19*20* |
---|---|
输出 | tst |
说明 | 无 |
解题思路
暴力替换,需要注释的是先从"10*" \~ "26*开始映射替换
Python算法源码
# 从用户输入接收密文字符串
s = input()
# 创建一个映射字典,用于将'10*'到'26*'映射到'j'到'z'
# 对于10到26之间的每个数字i,键是字符串形式的i加上'*';
# 对应的值是通过ASCII码转换得到的字母(ASCII码97是'a',所以96+i就是对应的字母)
mapping = {str(i) + '*': chr(96 + i) for i in range(10, 27)}
# 更新映射字典,将'1'到'9'映射到'a'到'i'
for i in range(1, 10):
# 将数字转换成字符串作为键,将ASCII码转换得到的字母作为值
mapping[str(i)] = chr(96 + i)
# 遍历映射字典中的每一对键值对
for key, value in mapping.items():
# 使用字符串的replace方法,将密文中的每个加密字符(键)替换为对应的字母(值)
s = s.replace(key, value)
# 打印解密后的明文字符串
print(s)
C算法源码
#include <stdio.h>
#include <string.h>
int main() {
char s[1000];
printf("Enter the ciphertext: ");
fgets(s, sizeof(s), stdin); // 从标准输入接收密文字符串
// 遍历映射并进行替换
for (int i = 26; i >= 1; i--) {
// 构造映射的键:对于10到26,添加'*';否则使用数字本身
char key[4]; // 考虑到多一位 '*'
sprintf(key, "%d%s", i, (i >= 10) ? "*" : "");
// 构造映射的值:ASCII码97对应'a',因此96+i对应的字符
char value = 96 + i;
// 使用字符串的替换方法,将密文中的每个加密字符(键)替换为对应的字母(值)
char *pos = strstr(s, key);
while (pos != NULL) {
pos[0] = value; // 替换为对应字母
memmove(pos + 1, pos + strlen(key), strlen(pos + strlen(key)) + 1); // 删除多余字符
pos = strstr(pos + 1, key); // 继续查找下一个匹配位置
}
}
// 打印解密后的明文字符串
printf("Decrypted text: %s", s);
return 0;
}
Java算法源码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the ciphertext: ");
String s = scanner.nextLine(); // 从标准输入接收密文字符串
// 遍历映射并进行替换
for (int i = 26; i >= 1; i--) {
// 构造映射的键:对于10到26,添加'*';否则使用数字本身
String key = Integer.toString(i) + (i >= 10 ? "*" : "");
// 构造映射的值:ASCII码97对应'a',因此96+i对应的字符
char value = (char) (96 + i);
// 使用字符串的replace方法,将密文中的每个加密字符(键)替换为对应的字母(值)
s = s.replace(key, Character.toString(value));
}
// 打印解密后的明文字符串
System.out.println("Decrypted text: " + s);
// 关闭扫描器
scanner.close();
}
}
4 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]