[HackerRank]凱撒加密(Caesar Cipher)

題目描述

尤利烏斯·凱撒藉由加密來保護他的機密資訊。凱撒的加密方式是用一個固定的數字K,來旋轉字串中的字母,讓他的字串沒有辦法被敵人給閱讀。給定一個字串S,和一個數字K,加密S並輸出加密後的結果字串。這個加密方法只能用來加密英文字母,若為符號(如「-」),則不進行加密。

原題網址

https://www.hackerrank.com/challenges/caesar-cipher-1

輸入格式

第一行包含一個整數N,範圍在1到100之間(包含1和100),表示要加密的字串長度。

第二行包含了要加密的字串S,由ASCII字元組成,不包含空格。

第三行包含一個整數K,範圍在0到100之間(包含0和100),做為加密要使用的金鑰,數字即為英文字母要旋轉的量(距離)。

範例輸出

分別在單獨的一行中輸出每個測試資料加密之後的字串。

範例輸入

11
middle-Outz
2

範例輸出

okffng-Qwvb

額外解釋

將每個還沒加密的英文字母取代為(旋轉至)字母排序K個之後字母英文字母都是區分大小寫且可循環的,若在旋轉時遇到字母的結尾(z或Z),則從頭(a或A)開始接續。例如,z的下一個字母為a,Z的下一個字母為A。

所以範例中:

m (ASCII 109) 變成 o (ASCII 111)。
i (ASCII 105) 變成 k (ASCII 107)。
- 不變。
O (ASCII 79) 變成 Q (ASCII 81)。
z (ASCII 122) 變成 b (ASCII 98)。

解題概念

先將輸入的字串轉成字元陣列,接著走訪每個字元元素,判斷字元值落在大寫英文還是小寫英文的區間。將字元值轉成數值(大寫字母字元值要減掉A的字元值;小寫字母字元值要減掉a的字元值),加上K之後,因為要旋轉,確保字元值落在相同大小寫字母的區間內,所以還要再去除以26(A到Z或是a到z中字母的數量為26)取餘數。最後再加回剛才減掉的字元值,即是加密過後的英文字母

參考答案

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章