題目連結:
凱薩加密,即為將某一字母替換成往後 k 個的字母。例如 k = 3,則 A 替換成 D , B 替換成 E ,以此類推。
現給定兩長度相同的字串,長度 ≦ 1, 000 且只由大寫字母組成。第一個字串代表明文(沒加密過的原始資料),第二個字串代表密文(加密過的資料)。已知其為凱薩加密法,求出ㄒ 相應的 k (0 ≦ k < 26)。
ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHIJKLMNOPQRSTUVWXYZABC
DLQXABXEEQMEUQYLZPEK
YGLSVWSZZLHZPLTGUKZF
Z
Z
我們根據凱薩加密法的定義可以得到:
密文字母 C =(原始字母 P + k) mod 26(取 26 的餘數)
因此
k = (C - P + 26) mod 26
其中 + 26 的運算是為了避免 C - P 為負的。
得到了上述關係式後,我們就可以直接取兩個字串的第一個字元,代入上述的關係式從而得到 k 值。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。