3.2 电话号码对应英语单词
原始问题如下:手机上面的数字键均对应了几个字符,譬如2对应了a,b,c。问题是当输入一段数字后,求出所有可能的字符组合
第一种方法:假设电话号码是n个数字,那么就n个for循环。
这方法果断不好
第二个方法:
#include <iostream>
#include <string>using namespace std;char c[10][10] =
{"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ",
};int total[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
int tel_length;
int number[10], answer[10];int main(int argc, const char * argv[]) {cin >> tel_length;for(int i = 0; i < tel_length; ++i) cin >> number[i];memset(answer, 0, sizeof(answer));while(true) {for (int i = 0; i < tel_length; i++) {printf("%c", c[number[i]][answer[i]]);}puts("\n");int k = tel_length-1;while(k >= 0) {if(answer[k] < total[number[k]] - 1) {answer[k]++;break;} else {answer[k] = 0;k--;}}if(k < 0) break;}return 0;
}
第三个方法:回溯法:
#include <iostream>
#include <string>using namespace std;char c[10][10] =
{"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ",
};int total[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
int tel_length;
int number[10], answer[10];void RecursiveSearch(int *number, int *answer, int index, int n) {if(index == n) {for(int i = 0; i < n; ++i) cout << c[number[i]][answer[i]];cout << endl;return ;} else {for (answer[index] = 0; answer[index] < total[number[index]]; answer[index]++) {RecursiveSearch(number, answer, index+1, n);}}
}int main(int argc, const char * argv[]) {cin >> tel_length;for(int i = 0; i < tel_length; ++i) cin >> number[i];memset(answer, sizeof(answer), 0);RecursiveSearch(number, answer, 0, tel_length);return 0;
}
3.2 电话号码对应英语单词相关推荐
- 第3章 结构之法——电话号码对应英语单词
电话号码对应英语单词 问题描述 分析与解法 详细代码如下: 1 package chapter3jiegouzhifa.TelephoneMapWords; 2 /** 3 * 电话号码对应英语单词 ...
- Bailian3712 电话号码生成英语单词【查表】
3712:电话号码生成英语单词 总时间限制: 1000ms 内存限制: 65536kB 描述 我们知道手机键盘上一般可以用于输入字母,2可以输入a,b,c,3可以输入d,e,f,4可以输入g,h,i, ...
- 编程之美——电话号码对应英语单词
编程之美--电话号码对应英语单词 电话号码盘一般可以用于输入字母.如用2可以输入A,B,C,用3可以输入D,E,F等... 问题1:可以根据这样的对应关系设计一个程序,尽可能快的从这些 ...
- 3.2电话号码对应英语单词
方法一. 神奇的双重while循环. 注:显然可以利用这种方法,打印出任意一个N维数组的任意组合. 个人理解:此双重循环的关键在于 answer[ ] 数组以及索引 k .answer[ ] 数组 ...
- 电话号码生成英语单词 OpenJ_Bailian - 3712 (c++,打表)
我们知道手机键盘上一般可以用于输入字母,2可以输入a,b,c,3可以输入d,e,f,4可以输入g,h,i,5可 以输入j,k,l,6可以输入m,n,o,7可以输入p,q,r,s,8可以输入t,u,v ...
- 编程之美 - 电话号码对应英语单词
问题描述: 电话的号码盘上一个数字对应着几个字母,一串数字对应着几种字母的组合. 现在给定一组数字,列出对应的字母的组合. 思路: 例如:4对应键盘上 GHI, 2对应键盘上 ABC 数字 42 的 ...
- 用计算机计算成品率计算公式,计算机专业英语+单词+部分习题.doc
计算机专业英语单词部分习题 KEY TERMS 第一单元 application software应用软件 basic application基本应用软件 communication device通信 ...
- 13-计算最长英语单词链
单词接龙,找出最长单词链,例如, 文件里有: Apple Zoo Elephant Under Fox Dog Moon Leaf Tree Pseudopseudohypoparathyroidis ...
- 成人怎么学计算机英语单词,成人怎么从零开始学英语单词
英语学习的过程中掌握方法很重要,方法用对,学习才能提高效率.下面是积累英语单词的方法,大家可以作为学习的参考. 1. 所选单词书不应太厚. 人们大都有喜新厌旧的毛病,老是捧着同一本书难免会产生厌烦情绪 ...
最新文章
- iOS App跳转权限设置
- html 加粗_若想学前端开发,要从HTML基本元素开始第一节
- OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
- 带你十分钟了解BFC(渡一教育笔记)
- html5 职工入职后台管理系统_后台管理平台
- theano java_Windows Theano GPU 版配置
- Linux中rps/rfs的原理及实现
- 告诉你为什么数据要取对数
- 设计模式C++描述----01.单例(Singleton)模式
- 计算机软技能,在个人简历中有哪些软技能可以写?
- SEO像艺术,为自己做站最划算
- Eclipse运行速度优化
- 笔记本内存和台式机内存的区别
- 解决锐捷客户端登陆时网卡网关配置有误的方法
- 【UE4】导入FBX格式文件后呈现人物躺着情况的解决方法
- 短视频用户陷入视觉疲劳,AI能否救场
- vue 引入json地图_vue中echarts引入中国地图的案例
- Openstack基础环境交换机常用配置(CISCO 3750G为例).md
- 微信小程序使用意见反馈
- C#利用time控件轮训