电话号码对应的英语单词
来源:互联网 发布:手机淘宝无法提交订单 编辑:程序博客网 时间:2024/04/25 06:09
具体问题描述见:《编程之美》-3.2 电话号码对应英语单词,在本文中主要根据《编程之美》中的思想分别利用递归与非递归的思想实现了电话号码对应英语单词的构造实现,主要考虑了排列树的思想,利用遍历树中的每个叶子节点来实现所有单词的集合。对应文中的查找方法正如《编程之美》中介绍的方法一样,主要根据构造的字典去匹配查找,其中具体思路请参考《编程之美》。
#include <stdio.h>#include <string.h>#include <stdlib.h>char c[10][10]={" "," ","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"}; //将各个数字所能代表的字符存储在一个二维数组中,并且假设0,1所代表的字符为空字符int total[10]={0,0,3,3,3,3,3,4,3,4}; //各个数字所代表的字符总数构成的数组void RSearch(int *num,int *answer,int index,int n){int i;if (index==n){for (i=0;i<n;i++)printf("%c",c[num[i]][answer[i]]);printf("\n");return;}/*遍历数中的每一个结点,所得到的所有路径是根据电话号码构造的单词*/for (answer[index]=0;answer[index]<total[num[index]];answer[index]++){RSearch(num,answer,index+1,n);}}void RrSearch(int *num,int *answer,int n){int i,k;while (1){for (i=0;i<n;i++)printf("%c",c[num[i]][answer[i]]);printf("\n");k=n-1;while (k>=0){if (answer[k]<total[num[k]]-1){answer[k]++;//第k个数的英语字母改变break; //只要有一个字母改变,就退出打印对应的英语字母}else{answer[k]=0; //第k个数移动完毕,并将其定义为0,接着开始遍历下一个数字k--;}}if (k<0)break;}}void main(){int answer[10]={0};int answer1[10]={0};int num[]={2,3,9};int n=sizeof(num)/sizeof(num[0]);printf("递归算法求得的结果:\n");RSearch(num,answer,0,n);printf("非递归算法求得的结果:\n");RrSearch(num,answer1,n);system("pause");}
- 电话号码对应的英语单词
- 电话号码对应的英语单词
- 电话号码对应的英语单词
- 3.2 电话号码对应的英语单词
- 电话号码对应英语单词[算法]
- 3.2电话号码对应英语单词
- 3.2电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- 3.2 电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- 电话号码对应英语单词
- [算法之美:3.2]电话号码对应的英语单词
- IOS系列——键盘的简单操作
- 合纵连横系列之背包的开始
- 一个模拟linux 下的cp命令
- IIUC ONLINE CONTEST 2008 / UVa 11389 The Bus Driver Problem (贪心)
- ubuntu下配置nfs服务<自己有一定的修改>
- 电话号码对应的英语单词
- 不经事,不懂事
- poj 1455 Crazy tea party
- VC 数据库编程 ADO和ODBC区别
- servlet学习笔记(一)
- MMC/SD子系统里驱动工程师负责的部分
- [2014美团笔试]在二维数组中查找一个数,数组元素的行和列均为升序
- C++中new三种用法
- Lcd驱动程序