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

CSU 1567 Reverse Rot:字符串反轉 + 循環移位加密模擬

     編輯:關於C++

問題描述

給定旋轉步數 N (1~27) 和字符串 (長度 1~40,含大寫字母、下劃線、句點)。先反轉字符串,再按字母表順序循環右移 N 位。字母表:`A-Z _ .` (28 字符,句點後回到 A)。輸入以 0 結束。

字母表映射

索引:0  1  2 ... 25 26 27
字符:A  B  C ... Z  _  .

移位公式:`newChar = alphabet[(oldIdx + N) % 28]`

完整代碼


#include 
#include 

const char* ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_.";

int main() {
    int n;
    char str[50], rev[50];
    while (scanf("%d", &n) == 1 && n) {
        scanf("%s", str);
        int len = strlen(str);
        // 1. 反轉
        for (int i = 0; i < len; ++i) rev[i] = str[len-1-i];
        rev[len] = '\0';
        // 2. 移位
        for (int i = 0; i < len; ++i) {
            const char* pos = strchr(ALPHABET, rev[i]);
            int idx = pos - ALPHABET;
            rev[i] = ALPHABET[(idx + n) % 28];
        }
        printf("%s\n", rev);
    }
    return 0;
}

樣例驗證

輸入:1 ABCD
反轉:DCBA
移位:E D C B  (D→E, C→D, B→C, A→B)
輸出:EDCB ✓

輸入:3 YO_THERE.
反轉:.EREHT_OY
移位:C H U H K W B R .
輸出:CHUHKWBR. ✓

關鍵細節

  1. 字母表長度 28:26 字母 + `_` + `.`
  2. strchr 查找索引:線性查找 28 字符極快,或預建 256 大小映射表 O(1)
  3. 模 28 循環:`(idx + n) % 28` 自動處理 wraparound
  4. 輸入結束條件:單獨一行 `0`

複雜度

  • 每測試用例:O(L) L=字符串長度 ≤ 40
  • 空間:O(1)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved