讨论 / 哪位大牛帮我看看哪里错了
_嘿_你的益达 2010-08-10 19:24:00
点我顶贴 收藏 删除
程序如下

var a:array['A'..'Z']of char;

x,y,z:char;

b:array['A'..'Z']of integer;

i:longint;

str1,str2,str3:string;

s:longint;

begin

readln(str1);

readln(str2);

readln(str3);

i:=1;

repeat

x:=str1[i];

y:=str2[i];

if b[x]=0

then

begin

a[x]:=y;

b[x]:=1;

s:=s+1;

end

else

if a[x]<>y

then

begin

writeln('Failed');

exit;

end;

i:=i+1;

until i=length(str1)+1;

if s<26

then

writeln('Failed')

else

begin

for i:=1 to length(str3) do

begin

z:=str3[i];

write(a[z]);

end;

writeln;

end;

end.

哪位大牛帮帮我

a数组记录密文对应关系 b数组记录是否有冲突

只有第3个点错了

#1 abccbazj@2010-08-10 19:14:00
回复 删除
看看我的代码

program rq518;

var a:array['A'..'Z']of char;

v:array['A'..'Z']of boolean;

n,i,j:longint;

s1,s2,t,ans:string;

k:char;

begin

readln(s1);

readln(s2);

readln(t);

fillchar(a,sizeof(a),0);

for i:=1 to length(s1) do

if (a[s1[i]]=#0)and(not v[s2[i]]) then begin a[s1[i]]:=s2[i];v[s2[i]]:=true;end

else if a[s1[i]]<>s2[i] then begin writeln('Failed');halt;end

else if (a[s1[i]]=#0)and(v[s2[i]]) then begin writeln('Failed');halt;end;

for k:='A' to 'Z' do if a[k]=#0 then begin writeln('Failed');halt;end;

ans:='';

for i:=1 to length(t) do

if a[t[i]]<>#0 then ans:=ans+a[t[i]] else begin writeln('Failed');halt;end;

writeln(ans);

end.

#2 abccbazj@2010-08-10 19:24:00
回复 删除
少考虑了一种情况

不同的字母对应不同的“密字”,还要判断当前的字母对应的“密字”是否以前被使用过,否则输出‘Failed’。即再加一条判断。

查看更多回复
提交回复