大家好!
不定时更新,题目+解析+评测结果+完整程序,有问题有瑕疵欢迎评论区留言!
1.题目
4. K14707 加密恢复
题目描述
对于信息的加密和解密,科科处理的已经非常得心应手了,于是科科想挑战更难一点的问题。
于是找到了这样的一道题目:为了防止信息泄露,一般在重要场合进行信息交流的时候都会对信息进行加密,收到加密信息的人再对信息进行解密。
加密和解密都是重要的一个步骤,大家更多注重的都是加密方式和解密方式。
现在给定了两个用于解密的密钥,密钥的使用方式如下。
第一个解密密钥key1:“yrwhsoujgcxqbativndfezmlpk”;
第二个解密密钥key2:“BCDEFGHIJKLMNOAPQRSXYZTUVW”;
解密密钥由26个字母构成,其中key1用于小写字母的解密密钥,key2用于大写字母的解密密钥。
意思是加密信息中的'a'实际上对应的是'y',加密信息中的'b'对应着'r','c'对应着'w',依次类推;
加密信息中的'A'实际上对应的是'B',加密信息中的'B'对应着'C','C'对应着'D',依次类推,如果是空格的话,保持不变。
在详细的了解解密规则后,科科发现大多数人只关注解密规则,确很少有人关注解密前的内容,科科想另辟蹊径找到解密前的内容。
现在给定解密密钥key1和key2,以及解密后的内容,请你帮忙计算出解密前的内容。
输入格式
第一行:输入26个小写字母构成的解密密钥key1
第二行:输入26个大写字母构成的解密密钥key2
第三行:输入解密后的信息,长度不超过255(字符串空可能包含空格以及大小写字母)。
输出格式
输出只有一行,为解密前的加密内容。
输入输出样例
输入样例1:复制
eydbkmiqugjxlvtzpnwohracsf EYDBKMIQUGJXLVTZPNWOHRACSF Jump the fence when you seeing me coming
输出样例1:复制
Kifq oua zarxa suar bti yaagrj fa xtfgrj
说明
如题目所述。
【耗时限制】1000ms 【内存限制】128MB
2.解析
这道题有点儿棘手。
1.变量
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
return 0;
}
k1:26个小写字母构成的解密密钥。
k2:26个大写字母构成的解密密钥k。
s:解密后的信息。
2.输入
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
cin>>k1>>k2;
cin.get();
getline(cin,s);
return 0;
}
注意cin.get()。
3.分情况判断
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
cin>>k1>>k2;
cin.get();
getline(cin,s);
for(int i=0;i<s.size();i++){
if(islower(s[i])){
s[i]=k1.find(s[i])+'a';
}else if(isupper(s[i])){
s[i]=k2.find(s[i])+'A';
}
}
return 0;
}
islower:
4.输出
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
cin>>k1>>k2;
cin.get();
getline(cin,s);
for(int i=0;i<s.size();i++){
if(islower(s[i])){
s[i]=k1.find(s[i])+'a';
}else if(isupper(s[i])){
s[i]=k2.find(s[i])+'A';
}
}
cout<<s;
return 0;
}
直接输出。
3.评测结果
4.完整程序
#include<bits/stdc++.h>
using namespace std;
string k1,k2,s;
int main()
{
cin>>k1>>k2;
cin.get();
getline(cin,s);
for(int i=0;i<s.size();i++){
if(islower(s[i])){
s[i]=k1.find(s[i])+'a';
}else if(isupper(s[i])){
s[i]=k2.find(s[i])+'A';
}
}
cout<<s;
return 0;
}
谢谢大家,给个赞呗!💕💕💕