解题思路:
输入-小写转换大写-密文转明文-大写转为小写输出
注意事项:
套用公式用于大写字母,输出时保留大小写,所以用f[i]标记小写字母;
如果k密钥长度不够,用(i%k_len)求;
公式:m[i]=c[i]-(k[i%k_len]-65);
明文=密文-(密钥-65)
参考代码:
#include<iostream>
#include<string.h>
using namespace std;
char key[1001];//密钥
char c[1001];//密文
char m[1001];//明文
int f[1001];//标记
int main() {
int i;
cin >> key >> c;
int c_len = strlen(c);
int k_len = strlen(key);
for (i = 0; i < c_len; i++) {
if (c[i] >= 'a' && c[i] <= 'z') {
f[i] = 1; //如果是小写字母就做标记
c[i] -= 32;//转换大写字母
}
}
//密钥转为大写字母
for (i = 0; i < k_len; i++) {
if (key[i] >= 'a' && key[i] <= 'z') {
key[i] -= 32;
}
}
//明文=密文-(密钥-65)
for (i = 0; i < c_len; i++) { //遍历密文
m[i]=c[i]-(key[i%k_len]-65);
if(m[i]<65){ //如果明文小于A
m[i]=m[i]+26; //就回到Z
}
}
//输出
for(i=0;i<c_len;i++){
if(f[i]==1){ //如果是小写,转为大写
m[i]+=32;
}
cout<<m[i];
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复