2440: 【入门】【P1914】 凯撒密码
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:61
解决:19
题目描述
密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 位形成的。
z
的下一个字母是 a
,如此循环。他现在找到了移动前的原文字符串及 ,请你求出密码。输入
第一行:。第二行:未移动前的一串字母。
输出
一行,是密码。
样例输入 复制
1
qwe
样例输出 复制
rxf
提示
字符串长度 。
读入字符串,然后将每个字符处理后输出。直接加上偏移量?
要求‘z’ 的下一个是‘a’,如此循环,因此不能直接加上偏移量。
计算这个小写字母是字母表第几个:s[i]-’a’
目标字母位置需加上n:s[i]-’a’+n
这个数可能超过25,所以需要对26 取模:(s[i]-’a’+n)%26
最后还要加回'a',变成对应的字母ASCII:(s[i]-’a’+n)%26+'a'
#include<bits/stdc++.h> using namespace std; int main(){ int n; char s[60]; scanf("%d %s",&n,s); //读入字符串 for (int i=0;s[i];i++) putchar((s[i]-'a'+n)%26+'a'); //计算偏移量并还原 return 0; }