讨论 / 为什么只有80分; 第一个和第二个数据怎么没过; 求解;
liaoyu 2017-01-28 23:45:12
点我顶贴 收藏 删除
#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

char s1[6500],s2[6500],s3[6500],s[6500];

//s1代表用于破解的加密信息;s2代表原信息;s3代表需要破解的加密信息;

int s4[6500]={0};//用于储存对应字母;如果s[i]=0;表示i没有发现与之对应的;

//如果i从复多次值则输出“Failed”;

int main()

{ //freopen("a.in","r",stdin);

//freopen("a.out","w",stdout);

memset(s4,0,sizeof(s4));

cin>>s1>>s2>>s3; //下标从一开始;

int len1=strlen(s1),len2=strlen(s2),len3=strlen(s3);

if(len1>=len2)

{

for(int i=0;i<len2;i++)

{

if(s4[int(s1[i])]==0)

s4[int(s1[i])]=int(s2[i]);

else

{if((int(s2[i]))!=s4[int(s1[i])])

{cout<<"Failed";

return 0;

}

}

}

}

else

{

for(int i=0;i<len1;i++)

if(s4[int(s1[i])]==0)

s4[int(s1[i])]=int(s2[i]);

else

{if((int(s2[i]))!=s4[int(s1[i])])

{cout<<"Failed";

return 0;

}

}

}

for(int i=0;i<len3;i++)

{

if(s4[int(s3[i])]==0)

{

cout<<"Failed";

return 0;

}

else s[i]=(char(s4[int(s3[i])]));

}

for(int i=0;i<len3;i++) cout<<s[i];

//fclose(stdin);

//fclose(stdout);

return 0;

}

查看更多回复
提交回复