问题:
对如非全键盘的手机上的数字,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ,要求对一段数字,输出其代表的所有可能的字母组合,如5869,可能代表JTMW、JTMX...
这个题目初看起来有点像全排列顺序。以下是非递归的程序,比较有技巧性。
// File : print_phone_word.cc
// Date : 2012/05/03 01:57:02
#include <iostream>
using namespace std;
char answer[10];
//
char c[10][10] = {
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz"
};
int c_num[10] = {
0,
0,
3,
3,
3,
3,
3,
4,
3,
4
};
void print_word(char number[], int n) {
while(true) {
for (int i = 0; i < n; i++) {
cout << c[number[i] - '0'][answer[i]];
}
cout << endl;
int k = n - 1;
while (k >= 0) {
if(answer[k] < c_num[number[k] - '0'] - 1) {
answer[k]++;
break;
} else {
answer[k] = 0;
k--;
}
}
if (k < 0) {
break;
}
}
}
int main() {
print_word("23445", 5);
}