编程之美题之电话号码对应英文单词

题目:

电话的号码盘一般可以用于输入字母,如用2可以输入A,B,C,用3可以输入D,E,F等,对于号码5869872可以依次输出其代表的所有的字母组合。

解法一:直接循环法:

#include<iostream>#include<stdio.h>using namespace std;#define TelLength 3int 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 3int 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 3void 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);}}

,钱财何足贵,仁义值千金。

编程之美题之电话号码对应英文单词

相关文章:

你感兴趣的文章:

标签云: