问题:
电话的号码盘一般可以用于输入字母,如用2可以输入a,b,c,用3可以输入d,e,f等。
对于号码5869872,可以依次输出其代表的所有字母组合。如:jtmwtpa,jtmwtpb………
1、您能否可以根据这样的对应关系设计一个程序,尽可能快地从这些字母组合中找到一个有意义的单词来描述一个电话号码呢?如:可以用单词“computer”来描述号码26678837。
分析与解法:
对于问题1,不妨掏出电话来研究,我们可以发现,除了0,1之外,其他数字上最少都有3个字符,其中7和9上有4个字符,我们可以假设0,1都是空字符
首先将问题简单化,若电话号码只有一位数,比如说4,那么其代表的单词为g,h,i,据此可以画出一颗排列树,如图
接着若电话号码升级到两位数,比如42,又将如何呢?分两步走,从左到右,在选择一个第一位数字所代表的字符的基础上,遍历第二位数字所代表的字符,直到遍历完第一位数字代表的所有字符。就拿42来说,4所能代表的字符为ghi,2所能代表的字符为abc,首先让4代表g,接着遍历2所能代表的所有字符,即可得到ga,gb,gc,然后再让4代表h,再次遍历2所能代表的所有字符,即可得到ha,hb,hc,最后让4代表i,那么同理可得到ia,ib,ic。如图
- 问题1解法一:直接循环
/*将每个数字所能代表的字母记录在一个二维数组c中,其中0、1代表空字符*/
char c[10][10] =
{
" ", //0
" "