var
a:array['A'..'Z'] of char;
n,s:longint;
m:char;
t,h,p:string;
begin
readln(t);
readln(h);
n:=length(t);
for s:=1 to n do
if (a[t[s]]=a[h[s]])or(a[t[s]]='')then
a[t[s]]:=a[h[s]] else begin writeln('Failed');halt; end;
readln(p);
for n:=1 to length(p) do
if a[p[n]]<>'' then write(a[p[n]]) else begin writeln('Failed'); halt; end;
end.
一个原文对应唯一的密字,同时一个密字也要对应唯一的原文。(但不是26个字母之间一一对应,搞清楚)
所以应该再用个数组来记录某个密字对应的原文,再来一个数组b就OK。
我的繁琐代码如下。。
var
s1,s2,s3:string;
a,b:array['A'..'Z'] of char;
j,n:longint;
i:char;
begin
readln(s1);
readln(s2);
readln(s3);
for i:='A' to 'Z' do
begin
a[i]:='0';
b[i]:='0';
end;
for j:=1 to length(s1) do
begin
if (a[s1[j]]<>'0')and(a[s1[j]]<>s2[j])then
begin
writeln('Failed');
halt;
end;
if (b[s2[j]]<>'0')and(b[s2[j]]<>s1[j])then
begin
writeln('Failed');
halt;
end;
if (a[s1[j]]='0')and((b[s2[j]]=s1[j])or(b[s2[j]]='0')) then
begin
a[s1[j]]:=s2[j];
b[s2[j]]:=s1[j];
end;
end;
for i:='A' to 'Z' do
if a[i]='0' then
begin
writeln('Failed');
halt;
end;
for j:=1 to length(s3) do
write(a[s3[j]]);
writeln;
end.