描述java
Julius Caesar曾經使用過一種很簡單的密碼。對於明文中的每一個字符,將它用它字母表中後5位對應的字符來代替,這樣就獲得了密文。好比字符A用F來代替。以下是密文和明文中字符的對應關係。
密文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明文
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
你的任務是對給定的密文進行解密獲得明文。
你須要注意的是,密文中出現的字母都是大寫字母。密文中也包括非字母的字符,對這些字符不用進行解碼。app
輸入ui
一行,給出密文,密文不爲空,並且其中的字符數不超過200。spa
輸出翻譯
輸出一行,即密文對應的明文。code
樣例輸入ci
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
樣例輸出get
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
來源input
翻譯自 South Central USA 2002 的試題 http://bailian.openjudge.cn/practice/2767/class
解題思路: 逆推
import java.util.Scanner; import java.util.HashMap; public class OpenJudge2767 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); HashMap<Character, Character> map = new HashMap<Character, Character>(); for (int i = 0; i < 21; i++) { map.put((char) ('F' + i), (char) ('F' + i - 5)); } map.put('A', 'V'); map.put('B', 'W'); map.put('C', 'X'); map.put('D', 'Y'); map.put('E', 'Z'); StringBuilder sb = new StringBuilder(); String input = cin.nextLine(); for (int i = 0; i < input.length(); i++) { char temp = input.charAt(i); if (temp >= 'A' && temp <= 'Z') { sb.append(map.get(temp)); } else { sb.append(temp); } } cin.close(); System.out.println(sb.toString()); } }