日期: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;
}
沒有留言:
張貼留言