《编程之美》——电话号码对应英语单词

本文探讨了如何根据电话号码上的数字与字母对应关系,设计程序快速找到有意义的英文单词。通过分析单个数字及两位数字的对应方法,提出了一种直接循环和递归两种解法,以解决如何描述电话号码的问题。例如,如何找到能表示'computer'的号码26678837。
摘要由CSDN通过智能技术生成

问题:
电话的号码盘一般可以用于输入字母,如用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
    " "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值