首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDOJ 1048:The Hardest Problem Ever - 凱撒密碼解碼

     編輯:關於C++

題目描述

輸入包含多組數據,每組以 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 循環右移)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved