輸入包含多組數據,每組以 START 開始,END 結束,整個輸入以 ENDOFINPUT 結束。在 START 和 END 之間的一行為密文,所有大寫字母左移 5 位(A→V, B→W, ..., E→Z, F→A, ..., Z→U),非大寫字符保持不變。輸出解碼後的明文。
'A'~'E':c + 21(等價於 c - 5 + 26)。'F'~'Z':c - 5。#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string line;
while (getline(cin, line)) {
if (line == "ENDOFINPUT") break;
if (line == "START") {
getline(cin, line); // 密文行
for (char &c : line) {
if (c >= 'A' && c <= 'Z') {
if (c <= 'E') c += 21;
else c -= 5;
}
}
cout << line << '\n';
getline(cin, line); // 讀取 END
}
}
return 0;
}
getline 讀整行,保留空格。START/END/ENDOFINPUT。char 上進行,利用 ASCII 碼連續性。簡單的凱撒密碼變體,核心是正確處理輸入格式與字符邊界(A-E 循環右移)。