题解【潜伏者】 C语言实现
基本上是先建一个密码表 一个个对应的存进去。
如果一个字母对应了多个密码 ,多个字母对应了多个密码 ,密码表没有填满
这三种情况就是错误编码 否则按照密码表把第三个字符串翻译出来
AC代码如下:
#include<stdio.h>
#include<string.h>
int main(){
int f=0,f1=0;
char mima[27]={'\0'};//初始化密码表 后有用
char a[150],b[150],c[150];
scanf("%s",&a);
scanf("%s",&b);
scanf("%s",&c);
for(int i=0;i<strlen(a);i++){
if(mima[a[i]-'A']=='\0') mima[a[i]-'A']=b[i];//密码未赋值 赋予一个对应密码值
else {
if(mima[a[i]-'A']!=b[i]) {
//如果已赋值且两次密码对应不同 则密码表错误
f=1;break;
}
}
}
//判断有无重复的对应密码
for(int i=0;i<26;i++){
for(int j=i+1;j<26;j++){
if(mima[i]==mima[j]) {
printf("Failed\n");
f1=1;
break;
//有,则跳出
}
}
if(f1==1) break;
}
if(f1!=1){
if(f==1||strlen(mima)<26) printf("Failed\n");//如果密码表未满或者一个字母对应了不同密码
else {
for(int i=0;i<strlen(c);i++){
printf("%c",mima[c[i]-'A']);//转码
}
}
}
return 0;
}
//希望对大家有所帮助~~~~~
//2022-11-11修改
现在gets()方法好像不让用,改成scanf(“%s”)录入字符串,可以正常AC。