# String# Modular Arithmetic# Character Manipulation

b516 - 凱撒密碼-商競103

🔗 前往 ZeroJudge 原題

題目描述

題目要求實作凱撒密碼的加密功能。凱撒密碼是一種簡單的替換密碼,將每個字母向後移動固定數量的位置。在本題中,移動的數量為 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;
	}
}

Discussion