熱門文章

2025年6月19日 星期四

ZeroJudge 解題筆記:p902. 凱撒密碼 (Cipher)

作者:王一哲
日期:2025年6月19日


ZeroJudge 題目連結:p902. 凱撒密碼 (Cipher)

解題想法


用字母的 ASCII 編號平移後再除以 26 取餘數,換成平移後的字母。

Python 程式碼


使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
import sys

for line in sys.stdin:
    s = line.strip()  # 要加密的字串
    k = int(input())  # 位移量
    a = ""  # 儲存答案用的空字串
    for c in s:  # 從 s 依序讀取字元 c
        if c.islower():  # 如果 c 是小寫字母
            c = chr((ord(c)+k-ord('a'))%26 + ord('a'))
        elif c.isupper():  # 如果 c 是大寫字母
            c = chr((ord(c)+k-ord('A'))%26 + ord('A'))
        a += c  # a 加上 c
    print(a)


C++ 程式碼


使用時間約為 2 ms,記憶體約為 344 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    string s;  // 要加密的字串
    while(getline(cin, s)) {
        int k; cin >> k;  // 位移量
        cin.ignore();  // 忽略 getline 之後剩下的 \n
        string a = "";  // 儲存答案用的空字串
        for(char c : s) {  // 從 s 依序讀取字元 c
            if (c >= 'a' && c <= 'z') {  // 如果 c 是小寫字母
                c = char((c+k-'a')%26 + 'a');
            } else if (c >= 'A' && c <= 'Z') {  // 如果 c 是大寫字母
                c = char((c+k-'A')%26 + 'A');
            }
            a += c;  // a 加上 c
        }
        cout << a << "\n";
    }
    return 0;
}


沒有留言:

張貼留言