b516 - 凱撒密碼-商競103
題目描述
題目要求實作凱撒密碼的加密功能。凱撒密碼是一種簡單的替換密碼,將每個字母向後移動固定數量的位置。在本題中,移動的數量為 3。如果移動後超出字母表範圍,則從字母表開頭重新開始。
解題思路
程式碼讀取輸入字串,然後遍歷字串中的每個字元。對於每個字元,如果它是大寫字母,則根據凱撒密碼的規則進行加密。如果字元大於等於 'A' 且小於 'X',則將其值增加 3。否則,將其值減去 23(相當於加上 3,並模 26)。最後,程式輸出加密後的字串。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。程式需要遍歷字串中的每個字元一次。
- 空間複雜度: O(1)。程式使用固定數量的額外空間,不隨輸入大小而變化。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
string a;
cin >> a;
while(cin >> a){
for(int i=0;i<a.length();i++){
if(a[i]>='A'&&a[i]<'X')
a[i]+=3;
else
a[i]-=23;
}
cout << a << endl;
}
}