悠游


私信TA

用户名:uq_87643911115

访问量:6713

签 名:

你好

等  级
排  名 42
经  验 12731
参赛次数 0
文章发表 206
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

大家好!我是糕手

解题思路:

初始化三个字符数组,分别存放给的密文,明文,要求解密的,再初始化一个整型数组,存放解密的字典,数组大小为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
2024-03-24 14:09:27
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)
2024-03-24 14:04:24
  • «
  • 1
  • »