讨论 / 看起来好像没错
luyao777 2010-10-25 04:26:00
点我顶贴 收藏 删除
program ee;

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.

#1 luyao777@2010-10-25 04:01:00
回复 删除
是 潜伏者 的

RT

#2 407137009@2010-10-25 04:26:00
回复 删除
回复 楼主luyao777 的帖子

一个原文对应唯一的密字,同时一个密字也要对应唯一的原文。(但不是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.

查看更多回复
提交回复