USACO 1.2 Name That Number(namenum) 程序
描述
在威斯康辛州奶牛牧場經營者之中,都習慣於請會計部門用連續數字給母牛打上烙印。但是,母牛在稱呼同伴時並沒感到這個系統的便利,它們更喜歡用它們喜歡的名字來呼叫它們的同伴,而不是用像這個的語句"C’mon, #4734, get along."。
請寫一個程序來幫助可憐的牧牛工將一隻母牛的烙印編號翻譯成一個可能的名字。因為母牛們現在都有手機了,使用那標準的按鍵的排布來把收到從數目翻譯成文字 除了"Q" 和 “Z"之外)
2: A,B,C 5: J,K,L 8: T,U,V 3: D,E,F 6: M,N,O 9: W,X,Y 4: G,H,I 7: P,R,S
可接受的名字都被放在這樣一個叫作"dict.txt”(點擊查看) 的文件中,它包含一連串的少於 5,000個可接受的牛名字。 (所有的名字都是大寫的)收到母牛的編號返回那些能從編號翻譯出來並且在字典中的名字(並且已經按照升序排列)。
舉例來說,編號 4734 能產生的下列各項名字:
GPDG GPDH GPDI GPEG GPEH GPEI GPFG GPFH GPFI GRDG GRDH GRDI GREG GREH GREI GRFG GRFH GRFI GSDG GSDH GSDI GSEG GSEH GSEI GSFG GSFH GSFI HPDG HPDH HPDI HPEG HPEH HPEI HPFG HPFH HPFI HRDG HRDH HRDI HREG HREH HREI HRFG HRFH HRFI HSDG HSDH HSDI HSEG HSEH HSEI HSFG HSFH HSFI IPDG IPDH IPDI IPEG IPEH IPEI IPFG IPFH IPFI IRDG IRDH IRDI IREG IREH IREI IRFG IRFH IRFI ISDG ISDH ISDI ISEG ISEH ISEI ISFG ISFH ISFI
碰巧,81箇中只有一個"GREG"是有效的(在字典中)。
寫一個程序來對給出的編號打印出所有的有效名字,如果沒有則輸出NONE。編號可能有12位數字。 格式
PROGRAM NAME: namenum
INPUT FORMAT:
(file namenum.in)
單獨的一行包含一個編號(長度可能從1到12)。
OUTPUT FORMAT:
(file namenum.out)
以字典順序輸出一個有效名字的不負列表,一行一個名字。
SAMPLE INPUT
4734
SAMPLE OUTPUT
GREG
我的程序
{
ID:ceeji
PROB:namenum
LANG:PASCAL
}
Program namenum;
Const
fin='namenum.in';
fou='namenum.out';
Var
dict:array[0..5000]of string;
s,ss:string;
f:text;
b:boolean;
i,j,l:longint;
Function isOK(p,c:char):boolean;
begin
if (c='Q')or(c='Z') then exit(false);
if (p='2')and(c>='A')and(c<='C') then exit(true);
if (p='3')and(c>='D')and(c<='F') then exit(true);
if (p='4')and(c>='G')and(c<='I') then exit(true);
if (p='5')and(c>='J')and(c<='L') then exit(true);
if (p='6')and(c>='M')and(c<='O') then exit(true);
if (p='7')and(c>='P')and(c<='S') then exit(true);
if (p='8')and(c>='T')and(c<='V') then exit(true);
if (p='9')and(c>='W')and(c<='Y') then exit(true);
exit(false);
end;
begin
assign(input,fin); reset(input);
assign(f,'dict.txt'); reset(f);
assign(output,fou); rewrite(output);
readln(s);
l:=length(s);
j:=0;
close(input);
while eof(f)=false do
begin
readln(f,ss);
if length(ss)<>l then continue;
b:=false;
for i:=1 to l do
begin
if isOK(s[i],ss[i])=false then begin b:=true; break; end;
end;
if b=false then begin inc(j); writeln(ss); end;
end;
close(f);
if j=0 then writeln('NONE');
close(output);
end.
© 轉載需附帶本文連結,依 CC BY-NC-SA 4.0 釋出。