原题链接:潜伏者
解题思路:
初始化三个字符数组,分别存放给的密文,明文,要求解密的,再初始化一个整型数组,存放解密的字典,数组大小为26,以数组元素序号代表密文,数组元素值为明文,来映射明文与密文的关系
注意事项:
只有题目三条规则都满足,才输出利用密码翻译电报中加密信息后得到的原信息
还有:
密文和明文是一对一关系
参考代码:
#include#includeint main() { char a[200],b[200],c[200]; int letter[26]={0};//解密字典,初始化下为0 scanf("%s%s%s",a,b,c); int len_a=strlen(a); int len_b=strlen(b); int len_c=strlen(c); for(int i=0;i<len_a;i++) { int e=a[i]-'A';//e是该密文对应的序号 int d=b[i]-'A';//d是明文对应的值 if(letter[e]==0||letter[e]==d+1) { letter[e]=d+1;//这里d+1是因为数组中初始值都为0,也就是说如果有密文没有对应的明文,也就是0,但是如果明文是'A',密文也是'A',此时也会为0,为了不混淆,就+1 } else if(letter[e]!=d+1)//这里是一个密文出现对应多个明文的情况 { printf("Failed"); return 0; } } for(int i=0;i<26;i++) { int k=0; for(int j=0;j1) { printf("Failed"); return 0; } } for(int i=0;i<len_c;i++) { int e=c[i]-'A';//得出对应密文序号,找对应的明文 if(letter[e]==0) { printf("Failed"); return 0; } else { c[i]=letter[e]+'A'-1;//前面加1了,后面要减1 } } printf("%s\n",c); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复