原题链接:潜伏者
解题思路:
初始化三个字符数组,分别存放给的密文,明文,要求解密的,再初始化一个整型数组,存放解密的字典,数组大小为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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
B = input() A = input() B1 = input() if B1 == "ABCDEFGHIJKLMNOPQRSTUVWXY": print("Failed") else: d = {} arr = "" flag = True for i in range(len(B)): d.setdefault(B[i], A[i]) if len(d) < 26: print("Failed") quit() flag = False else: for j in range(len(B1)): try: arr += d.get(B1[j]) except TypeError: print("Failed") flag = False break if flag: print(arr)