编程之美题之电话号码对应英文单词
2015-02-20 13:43
302 查看
题目:
电话的号码盘一般可以用于输入字母,如用2可以输入A,B,C,用3可以输入D,E,F等,对于号码5869872可以依次输出其代表的所有的字母组合。
解法一:直接循环法:
来看下面的一种解法。
电话的号码盘一般可以用于输入字母,如用2可以输入A,B,C,用3可以输入D,E,F等,对于号码5869872可以依次输出其代表的所有的字母组合。
解法一:直接循环法:
#include<iostream> #include<stdio.h> using namespace std; #define TelLength 3 int main() { char c[10][10]= { "", //0 "", //1 "ABC", //2 "DEF", //3 "GHI", //4 "JKL", //5 "MNO", //6 "PQRS", //7 "TUV", //8 "WXYZ" //9 }; int total[10] = {0,0,3,3,3,3,4,3,4}; int number[TelLength] = {4,2,7}; int answer[TelLength] = {0,0,0}; cout << "427" << "对应的所有英文是:\n"; for(answer[0] = 0; answer[0] < total[number[0]]; answer[0] ++) for(answer[1] = 0; answer[1] < total[number[1]]; answer[1] ++) for(answer[2] = 0; answer[2] < total[number[2]]; answer[2] ++) { for(int i = 0; i < TelLength; i ++) cout << c[number[i]][answer[i]]; cout << "\n"; } getchar(); return 0; }以上代码是三级的循环,如果多四级或5级的呢,那再加循环,太麻烦了。
来看下面的一种解法。
#include<iostream> #include<stdio.h> using namespace std; #define TelLength 3 int main() { char c[10][10]= { "", //0 "", //1 "ABC", //2 "DEF", //3 "GHI", //4 "JKL", //5 "MNO", //6 "PQRS", //7 "TUV", //8 "WXYZ" //9 }; int total[10] = {0,0,3,3,3,3,4,3,4}; int number[TelLength] = {4,2,7}; int answer[TelLength] = {0,0,0}; cout << "427" << "对应的所有英文是:\n"; while(true) { for(int i = 0; i < TelLength; i ++) cout << c[number[i]][answer[i]]; cout << "\n"; int k = TelLength - 1; while(k >=0) { if(answer[k] < total[number[k]] - 1) { answer[k] ++; break; } else { answer[k] = 0; k --; } } if( k < 0) break; } getchar(); return 0; } void RecursiveSearch(char c[10][10], int total[10], 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 << "\n"; return; } for(answer[index] = 0; answer[index] < total[number[index]]; answer[index] ++) { RecursiveSearch(c, total, number, answer, index + 1, n); } }解法二:递归方法
#include<iostream> #include<stdio.h> using namespace std; #define TelLength 3 void RecursiveSearch(char c[10][10], int total[10], int* number, int* answer, int index, int n); int main() { char c[10][10]= { "", //0 "", //1 "ABC", //2 "DEF", //3 "GHI", //4 "JKL", //5 "MNO", //6 "PQRS", //7 "TUV", //8 "WXYZ" //9 }; int total[10] = {0,0,3,3,3,3,4,3,4}; int number[TelLength] = {4,2,7}; int answer[TelLength] = {0,0,0}; cout << "427" << "对应的所有英文是:\n"; RecursiveSearch(c, total, number, answer, 0, TelLength); getchar(); cout << "hello world!" << endl; return 0; } void RecursiveSearch(char c[10][10], int total[10], 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 << "\n"; return; } for(answer[index] = 0; answer[index] < total[number[index]]; answer[index] ++) { RecursiveSearch(c, total, number, answer, index + 1, n); } }
相关文章推荐
- 编程之美:电话号码对应英文单词( 程序实现)
- 《编程之美》 - 3.2 电话号码对应英文单词 (发现书上递归解法的错误)
- 电话号码与英文单词对应
- 编程之美--3.2电话号码对应英文单词
- 编程之美-电话号码对应英文单词方法整理
- 电话号码对应的英文单词 手机数字短信翻译小工具 数字输入法初型 需求“ya tou”咋写程序实现翻译成“丫头”,有哪位有思路的请指教。
- 电话号码对应英文单词
- 编程之美-电话号码对应的英文单词
- 编程之美--3.2电话号码对应英文单词
- 《编程之美》——3.2电话号码对应英语单词
- 读入两个小于100的正整数A和B,计算A+B.A和B的每一位数字由对应的英文单词给出.
- 3.2电话号码对应英语单词
- 编程之美 3.2电话号码对应英语单词
- 编程之美3.2 电话号码对应英语单词
- 编程之美:电话号码对应单词 多重for循环转化为while语句
- 电话号码对应的英语单词
- 编程之美第三章-3.2-电话号码以及对应的单词
- 编程之美 3.2 电话号码对应英语单词
- [编程之美] PSet3.2 电话号码对应英语单词
- 编程之美 - 电话号码对应英语单词