解题思路:
初始化三个字符数组,分别存放给的密文,明文,要求解密的,再初始化一个整型数组,存放解密的字典,数组大小为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 人评分
这题怎么绕过我第4行代码直接打印错误答案的,用python写根本就过不了。 测试数据: QWERTYUIOPLKJHGFDSAZXCVBN ABCDEFGHIJKLMNOPQRSTUVWXY DSLIEWO 我的输出: Failed 测试数据的答案: Failed 测试数据中我的输出: QRKHCBI
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)