原始问题如下:手机上面的数字键均对应了几个字符,譬如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 电话号码对应英语单词相关推荐

  1. 第3章 结构之法——电话号码对应英语单词

    电话号码对应英语单词 问题描述 分析与解法 详细代码如下: 1 package chapter3jiegouzhifa.TelephoneMapWords; 2 /** 3 * 电话号码对应英语单词 ...

  2. Bailian3712 电话号码生成英语单词【查表】

    3712:电话号码生成英语单词 总时间限制: 1000ms 内存限制: 65536kB 描述 我们知道手机键盘上一般可以用于输入字母,2可以输入a,b,c,3可以输入d,e,f,4可以输入g,h,i, ...

  3. 编程之美——电话号码对应英语单词

    编程之美--电话号码对应英语单词     电话号码盘一般可以用于输入字母.如用2可以输入A,B,C,用3可以输入D,E,F等...     问题1:可以根据这样的对应关系设计一个程序,尽可能快的从这些 ...

  4. 3.2电话号码对应英语单词

    方法一.  神奇的双重while循环.  注:显然可以利用这种方法,打印出任意一个N维数组的任意组合. 个人理解:此双重循环的关键在于 answer[ ] 数组以及索引 k .answer[ ] 数组 ...

  5. 电话号码生成英语单词 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 ...

  6. 编程之美 - 电话号码对应英语单词

    问题描述: 电话的号码盘上一个数字对应着几个字母,一串数字对应着几种字母的组合. 现在给定一组数字,列出对应的字母的组合. 思路: 例如:4对应键盘上  GHI, 2对应键盘上 ABC 数字 42 的 ...

  7. 用计算机计算成品率计算公式,计算机专业英语+单词+部分习题.doc

    计算机专业英语单词部分习题 KEY TERMS 第一单元 application software应用软件 basic application基本应用软件 communication device通信 ...

  8. 13-计算最长英语单词链

    单词接龙,找出最长单词链,例如, 文件里有: Apple Zoo Elephant Under Fox Dog Moon Leaf Tree Pseudopseudohypoparathyroidis ...

  9. 成人怎么学计算机英语单词,成人怎么从零开始学英语单词

    英语学习的过程中掌握方法很重要,方法用对,学习才能提高效率.下面是积累英语单词的方法,大家可以作为学习的参考. 1. 所选单词书不应太厚. 人们大都有喜新厌旧的毛病,老是捧着同一本书难免会产生厌烦情绪 ...

最新文章

  1. iOS App跳转权限设置
  2. html 加粗_若想学前端开发,要从HTML基本元素开始第一节
  3. OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
  4. 带你十分钟了解BFC(渡一教育笔记)
  5. html5 职工入职后台管理系统_后台管理平台
  6. theano java_Windows Theano GPU 版配置
  7. Linux中rps/rfs的原理及实现
  8. 告诉你为什么数据要取对数
  9. 设计模式C++描述----01.单例(Singleton)模式
  10. 计算机软技能,在个人简历中有哪些软技能可以写?
  11. SEO像艺术,为自己做站最划算
  12. Eclipse运行速度优化
  13. 笔记本内存和台式机内存的区别
  14. 解决锐捷客户端登陆时网卡网关配置有误的方法
  15. 【UE4】导入FBX格式文件后呈现人物躺着情况的解决方法
  16. 短视频用户陷入视觉疲劳,AI能否救场
  17. vue 引入json地图_vue中echarts引入中国地图的案例
  18. Openstack基础环境交换机常用配置(CISCO 3750G为例).md
  19. 微信小程序使用意见反馈
  20. C#利用time控件轮训

热门文章

  1. 网络安全防护-----本地组策略的使用
  2. 为什么图片反复压缩后会普遍会变绿而不是其他颜色?
  3. 修复版拼团商城前端+后端微信小程序源码下载
  4. ISCC 2019 逆向rev02
  5. win10中查看wifi密码
  6. 借助小程序云开发实现小程序的登陆注册功能
  7. Golang学习+深入(十三)-goroutine/channal
  8. RTL8367/N/RB/S/SC系列千兆交换机方案选型参考
  9. 蓝桥杯第09届 2018年省赛C/C++大学生B组——试题8 日志统计
  10. Ceph学习——客户端读写操作分析