命名那个数字(Usaco1.2.3)必须是Pascal 要程序和集体思路

2024-12-14 18:40:05
推荐回答(1个)
回答1:

const FileUrl = 'namenum';
MDict : array[1..26] of integer = (2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0);
var FRead,FDict : text;
GNum,GT,GJ : string;
Ja : boolean;
GN,Fa : longint;
function GJudge : boolean;
begin
GJudge := true;
for Fa := 1 to GN do GJ[Fa] := chr(MDict[ord(GT[Fa]) - 64] + 48);
for Fa := 1 to GN do if (GJ[Fa] <> GNum[Fa]) then exit(false);
end;
begin
assign(FRead,(FileUrl + '.in'));
reset(FRead);
readln(FRead,GNum);
close(FRead);
assign(FDict,'dict.txt');
reset(FDict);
assign(FRead,(FileUrl + '.out'));
rewrite(FRead);
Ja := true;
GN := length(GNum);
GJ := ' ';
repeat
readln(FDict,GT);
if (GN = length(GT)) then
if GJudge then begin
writeln(FRead,GT);
Ja := false;
end;
until GT = 'ZYTA';
if Ja then writeln(FRead,'NONE');
close(FRead);
close(FDict);
end.

思路
由于可使用的名称都在字典里
而且每次运行只需处理一个数字串
那么可以边读取文件边判断
判断时
先保证可用名称与所给数字长度相等
然后对每一位进行有效性检验
如果成立
直接输出即可