アルファベットを戻す処理を書くのが最初は難しいかもしれない
問題概要
シーザー暗号とは、文字列に対して、各文字を 3 つずつ進めたものに変換するものである。ただし、X, Y, Z はそれぞれ A, B, C となる。具体的には、次のようなる。
- 変換前 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
- 変換後 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
ある文字列がシーザー暗号化された文字列 が与えられるので、それを復号化した文字列を出力せよ。
解法
アルファベットを 3 つ戻す処理が実装できればよい。その方法は、公式解説に詳しく書いてある。
コード
#include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; // 各文字について処理 for (int i = 0; i < S.size(); ++i) { // その文字がアルファベットで何番目かを知る ('A' を 0 とする) int order = S[i] - 'A'; // 3 つ前に戻す (ここが少し難しいかもしれない) int new_order = (order - 3 + 26) % 26; // その文字を復元する char c = 'A' + new_order; S[i] = c; } cout << S << endl; }