1570. 【基础赛】挑战(challenge)
(Input: challenge.in, Output: challenge.out)
题目描述
Introl 组织了一场大挑战赛,并准备了丰厚的奖品,他给了挑战者每人一个加密之后的密码,并给了你加密的规则,请你还原它获得正确的密码拿到奖品。
加密规则如下:
对于任意字符串 S,将其中的每一个数字元素 num 都变换成 num+i(其中 i 是该字符的位置,且规定字符串的第一个字符位置为 1 )如果结果大于 9,只保留个位数字。之后将其中的大写字母变成小写字母,将小写字母变成大写字母。
输入
从文件 challenge.in
中读入数据。
第一行输入一个正整数 N ,表示字符串的长度。
第二行输入加密之后的字符串 S 。
输出
输出到文件 challenge.out
中。
输出解密之后的字符串 S′。
输入
10 Xyi2NT7810
输出
xYI8nt0020
数据范围限制
对于30% 的数据,1≤N≤10。
对于100% 的数据,1≤N≤1000。
思路:
题目要求解密,大小写字母相差32,相相加相减即可,而数字要判断他的位数,再减去结果%10如果小于0,+10即可
#include<bits/stdc++.h>//头文件
using namespace std;
char a[10000];//加密后的字符串
int n;//长度
int main()
{
freopen("challenge.in","r",stdin);//文件输入
freopen("challenge.out","w",stdout);//文件输出
scanf("%d\n%s",&n,a);//输入
for(int i=0;i<n;i++)//循环每个字符
{
if(a[i]>='a'&&a[i]<='z')//小写转大写
{
a[i]-=32;//转置
continue;//跳过后续语句,回到上面
}
if(a[i]>='A'&&a[i]<='Z')//大写转小写
{
a[i]+=32;//转置
continue;//跳过后续语句,回到上面
}
if(a[i]>='0'&&a[i]<='9')//数字解密
{
a[i]=int(a[i]-'0');//变为数字(整形)
a[i]=((a[i]-1-i)%10+10)%10;//减对应的编号mod10因为有可能n>10
a[i]=a[i]+'0';//变为字符类数字
continue;//跳过后续语句,回到上面
}
}
printf("%s",a);//输出加密前的字符串
}