ACSII编码做法,有三个点过不了

Q和A对应时就过不了

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct ABC
{
    char x;
    char y;
}w[101];
char a[200],b[200],c[200],d[200];
char g[27];
int main()
{
    cin>>a>>b>>c;
    int n=strlen(a),m=strlen(c);
    for(int i=1;i<=n;i++)
      {
        w[i].x=a[i];
        w[i].y=b[i];
      }
    memset(g,0,sizeof(g));
    for(int i=0;i<n;i++)
      for(int j=0;j<n;j++)
        {
            if((a[i]==a[j]&&b[i]!=b[j])||(a[i]!=a[j]&&b[i]==b[j]))
              {cout<<"Failed";return 0;}
        }
    for(int i=1;i<=n;i++)
      g[w[i].x-64]=w[i].y;
    
    for(int i=1;i<=26;i++)
      if(g[i]==0)
        {
            cout<<"Failed";
            return 0;
        }   
    for(int i=0;i<m;i++)
      {
            d[i]=g[c[i]-64];
      }  
    d[m]='\0';
    puts(d);
}

1 条评论

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

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

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

  • 1

信息

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