/* * 解题思路: * 加密: a->B, Z->a, 1->2, 9->0 * 解密: B->a, a->Z, 2->1, 0->9 * 不知所云: * 1. 这题目真没意思...大概是我太菜了...想不到好的解法 * 2. (参考其他答案)这类题目查表法, 代码写起来就没那么丑, 果然还是太菜了还不长记性... * 提交失败: * 1. 没注意题目要求多组输入... * 2. 解密部分处理0错误, copy加密部分代码改漏了 */ import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { char[] encrypt = sc.nextLine().toCharArray(); for (int i = 0; i < encrypt.length; i++) { if (encrypt[i] >= 'a' && encrypt[i] <= 'y') { encrypt[i] = (char)(encrypt[i] - ('a' - 'B')); continue; } if (encrypt[i] >= 'A' && encrypt[i] <= 'Y') { encrypt[i] = (char)(encrypt[i] + ('b' - 'A')); continue; } if (encrypt[i] >= '0' && encrypt[i] <= '8') { encrypt[i] = (char)(encrypt[i] + 1); continue; } if (encrypt[i] == 'z') encrypt[i] = 'A'; else if (encrypt[i] == 'Z') encrypt[i] = 'a'; else if (encrypt[i] == '9') encrypt[i] = '0'; } System.out.println(new String(encrypt)); char[] decrypt = sc.nextLine().toCharArray(); for (int i = 0; i < decrypt.length; i++) { if (decrypt[i] >= 'b' && decrypt[i] <= 'z') { decrypt[i] = (char)(decrypt[i] - ('b' - 'A')); continue; } if (decrypt[i] >= 'B' && decrypt[i] <= 'Z') { decrypt[i] = (char)(decrypt[i] + ('a' - 'B')); continue; } if (decrypt[i] >= '1' && decrypt[i] <= '9') { decrypt[i] = (char)(decrypt[i] - 1); continue; } if (decrypt[i] == 'a') decrypt[i] = 'Z'; else if (decrypt[i] == 'A') decrypt[i] = 'z'; else if (decrypt[i] == '0') decrypt[i] = '9'; } System.out.println(new String(decrypt)); } } }
补充查表法, 性能内存占用先不管, 至少看起来没有那么丑了...
/* * 解题思路:查表法 */ import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String encrypt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; String decrypt = "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza1234567890"; while (sc.hasNextLine()) { char[] str1 = sc.nextLine().toCharArray(); for (int i = 0; i < str1.length; i++) { int idx = encrypt.indexOf(str1[i]); str1[i] = idx >= 0 ? decrypt.charAt(idx) : str1[i]; } System.out.println(new String(str1)); char[] str2 = sc.nextLine().toCharArray(); for (int i = 0; i < str2.length; i++) { int idx = decrypt.indexOf(str2[i]); str2[i] = idx >=0 ? encrypt.charAt(idx) : str2[i]; } System.out.println(new String(str2)); } } }