百練2767: 簡單密碼 之 解題報告

2767:簡單密碼

描述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());
	}

}
相關文章
相關標籤/搜索