为什么前三个点过不了?

#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2,s3;
cin>>s1>>s2>>s3;
char s4[s3.length()];
for(int i=0;i<s3.length();i++){
bool bo=0;
for(int j=0;j<s1.length();j++){
if(s3[i]==s1[j]){
s4[i]=s2[j];
bo=1;
break;
}
}
if(bo==0){
cout<<"Failed(2)";
return 0;
}
}
for(int i=0;i<s3.length();i++){
for(int j=0;j<s3.length();j++){
if((s4[i]==s4[j])^(s3[i]==s3[j])){
cout<<"Failed(3)";
return 0;
}
}
}
for(int i=0;i<s3.length();i++)
cout<<s4[i];
}

2 条评论

  • @ 2021-10-17 21:04:49

    注意题目中有两条:
    1. 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
    2. 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反 S国密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。

    所以要注意有没有密文字母没有出现过,而不是仅仅判断有没有需要破译的密文字母没有出现过,并且要判断有没有明文对应的密文重复,而不仅仅是密文对应的明文重复。

  • @ 2018-02-10 23:23:09

    求大佬解答

  • 1

信息

ID
1752
难度
5
分类
模拟 点击显示
标签
递交数
3159
已通过
1030
通过率
33%
被复制
11
上传者