2020年2月26日 星期三

[zerojudge]a009. 解碼器

a009. 解碼器

這題是很經典的凱薩密碼,說穿了就是字的位移,舉例來說A這個字往後移兩格變成C,CAT就會變成ECV。
要解題首先要知道字元移位之後會變成哪個字元,幸好有個東西叫做ASCII碼,負責將數字對應到特定字元,例如小寫a是十進位的97。
又剛好英文字母表在ASCII中是有順序的排列的,也就是說a = 97, b = 98, c = 99......
所以將使用者輸入的字元轉換成數字之後就能夠簡單的進行移位。

那在Java中要如何把字元char轉換成整數int呢?用華麗的強制型態轉換就OK了!在char變數面前加上一個(int)就會變成整數,順帶一提Java中的字元是以Unicode(萬國碼)儲存的。
經過用眼睛觀察法發現,題目中的明文(原文)和密文(加密過後的暗號)之間差了7個字元,明文 - 7 = 密文

程式碼如下:

import java.util.Scanner;

public class Pa009{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNext()){
            char[] line = scanner.nextLine().toCharArray(); //nextLine可以讀取一行,型態是String,String可以用toCharArray方法轉成字元陣列
            
            for(char ch: line){ //for-each,詳見https://openhome.cc/Gossip/JavaEssence/Foreach.html
                System.out.print((char)((int)ch - 7));
            }
            System.out.println();
        }
    }
}    
參考:http://mm.tlrc.mcu.edu.tw/courses/fhwang/accredit/JAVA/char.html

沒有留言:

張貼留言