电话号码

来源:互联网 发布:php空间销售系统源码 编辑:程序博客网 时间:2024/04/28 14:39

电话号码

源程序名            phone.???(pas, c, cpp)

可执行文件名        phone.exe

输入文件名          phone.in

输出文件名          phone.out

【问题描述】

       电话机上每一个数字下面都写了若干个英文字母。分布如下:

      1~abc

      2~def

      3~ghi

      4~jkl

      5~mn

      6~opq

      7~rst

      8~uvw

      9~xyz

      现在给定一个单词表和一串数字密码,请你用单词表中的单词翻译这个密码。

【输入】

       第一行为一个正整数N表示单词表中单词的个数(N≤100);

       第二行为一个长度不超过100的数字串,表示密码;

       接下来的N行,每行一个长度不超过20的单词,表示单词表。

【输出】

    仅一行,表示翻译后的原文,如果密码无法翻译,则输出“No Solutions!”,如果密码有多种翻译方式,则输出任意一种即可。

【样例】

       phone.in                              phone.out

       8                                        thi shs b boo k

       73373711664

       thi

       shs

       this

       is

       b

       a

       boo

       k

=====================

一个深搜就可以了.

主要方法:把每个单词转化成对应的数字串。搜索中在加个check,判断就行了.

=====================

 

const  pho:array['a'..'z']of char=  ('1','1','1','2','2','2','3','3','3','4','4','4','5','5','6','6','6','7','7','7','8','8','8','9','9','9'); // a   b   c   d   e   f   g   h   i   j   k   lvar  n,m:longint;  num:array[1..100]of string;  num_:array[1..100]of string;  //f:array[1..100]of boolean;  st:string;  procedure init;begin  assign(input,'phone.in');  assign(output,'phone.out');  reset(input); rewrite(output);end;procedure terminate;begin  close(input); close(output);  halt;end;function check(a:string;var b:string):boolean;var  i:longint;begin  check:=false;  for i:=1 to n do    if a=num_[i] then      begin        b:=num[i];        exit(true);      end;end;procedure dfs(t:longint;st_:string);var  i:longint;  st__,st1:string;begin  if t=m+1 then    begin      for i:=1 to length(st_)-1 do        write(st_[i]);      terminate;    end;      st__:='';  for i:=t to m do    begin      st__:=st__+st[i];      if check(st__,st1) then       begin         dfs(i+1,st_+st1+' ');       end;    end;end;procedure main;var  i,j:longint;begin  readln(n);  readln(st);  m:=length(st);  for i:=1 to n do    begin      readln(num[i]);      num_[i]:='';      for j:=1 to length(num[i]) do        num_[i]:=num_[i]+pho[num[i][j]];    end;  //fillchar(f,sizeof(f),true);  dfs(1,'');  writeln('No Solutions!');end;begin  init;  main;  terminate;end.


 

原创粉丝点击