2440: 【入门】【P1914】 凯撒密码

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:61 解决:19

题目描述

密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 lns="http://www.w3.org/1998/Math/MathML"> 位形成的。z 的下一个字母是 a,如此循环。他现在找到了移动前的原文字符串及 lns="http://www.w3.org/1998/Math/MathML">,请你求出密码。

输入

第一行:lns="http://www.w3.org/1998/Math/MathML">。第二行:未移动前的一串字母。

输出

一行,是密码。

样例输入 复制

1
qwe

样例输出 复制

rxf

提示

字符串长度 lns="http://www.w3.org/1998/Math/MathML">50

读入字符串,然后将每个字符处理后输出。直接加上偏移量?

要求‘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;
}