一、题目
解密
【问题描述】
小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的字符 Tc。下表给出了字符变换的规则:
例如,将字符串 YeRi 加密可得字符串 EaFn。
小明有一个随机的字符串,加密后为EaFnj ISplh FviDh wFbEj RjfIB BkRyY,由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?(如果你把以上字符串和表格复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 str.txt,第一行为上面的字符串,后面 52 行依次为表格中的内容。)
二、分析
我的办法:
我们直接对应看原字符串
E | Y |
a | e |
F | R |
n | i |
j | k |
I | G |
S | S |
p | u |
I | G |
h | L |
F | R |
v | z |
i | g |
D | D |
h | l |
w | v |
F | S |
b | w |
E | Y |
j | k |
R | X |
j | k |
f | r |
l | G |
B | W |
B | W |
k | h |
R | X |
y | a |
Y | A |
答案:
YeRikGSunlRzgDlvRwYkXkrGWWhXaA
通过学习别人的代码:
我们将要转换的字符串存放在数组里面,然后将字符之间的对应关系分别放在两个字符串当中,遍历要转换的字符串,看我们要转换的字符 在加密字符串中的位置,然后将原串中的这个位置加到str3中。
package lan2020;
public class A解密 {
public static void main(String[] args) {
String str = "EaFnjISplhFviDhwFbEjRjfIBBkRyY";
char[] a = str.toCharArray();
String Str1 = "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ";
String Str2 = "yxmdacikntjhqlgoufszpwbrevYXMDACIKNTJHQLGOUFSZPWBREV";
String str3 = "";
for(int i = 0; i < a.length; i++) {
int j = Str2.indexOf(a[i]);//看我们要转化的字符串在加密的字符串中的位置
str3 += Str1.substring(j, j+1);//找出原字符串在此位置的对应的字符
}
System.out.println(str3);
}
}
执行结果:
YeRikGSunlRzgDlvRwYkXkrGWWhXaA