在 C/C++ 中,可以使用哪些字符串组合拨打号码?
cc++server side programmingprogramming
对于给定的号码,显示或打印所有可能的字符串组合,这些组合可用于在电话中拨打给定号码,具体方法如下。
在给定的电话中,我们可以拨号,
2 实现 A 或 B 或 C,
3 实现 D 或 E 或 F,
…………….
8 实现 T 或 U 或 V,
9 实现 W 或 X 或 Y 或 Z,
1 仅实现 1
0 实现0.
例如,如果给定的电话号码是 89,则程序应打印
TW、TX、TY、TZ、UW、UX、UY、UZ、VW、VX、VY、VZ
#include <stdio.h> #include <string.h> // TableHash[i] 存储与电话中的数字 i 相对应的所有字符 const char TableHash[10][5] = {"", "", "WXYZ", "TUV", "PQRS", "MNO", "GHI", "GHI", "DEF", "ABC"}; // 一个递归函数,用于显示或打印通过实现大小为 n1 的输入 number1[] 可以获得的所有可能的单词。 The output words are one by one stored in output1[] void UtilWordsPrint(int number1[], int curr_digit1, char output1[], int n1) { // 在基本情况下,如果当前输出字已准备好 int i; if (curr_digit1 == n1) { printf("%s ", output1); return ; } // 我们尝试在 number1[] 中为当前数字输入所有 3 个可能的字符 // 并针对剩余数字重复此操作 for (i=0; i<strlen(TableHash[number1[curr_digit1]]); i++) { output1[curr_digit1] = TableHash[number1[curr_digit1]][i]; UtilWordsPrint(number1, curr_digit1+1, output1, n1); if (number1[curr_digit1] == 0 || number1[curr_digit1] == 1) return; } } // UtilWordsPrint() 的包装器。它能够创建一个 output1 数组并调用 UtilWordsPrint() void printWords(int number1[], int n1) { char result1[n1+1]; result1[n1] ='\0'; UtilWordsPrint(number1, 0, result1, n1); } //Driver program int main(void) { int number1[] = {2, 3, 4}; int n1 = sizeof(number1)/sizeof(number1[0]); printWords(number1, n1); return 0; }
输出
WTP WTQ WTR WTS WUP WUQ WUR WUS WVP WVQ WVR WVS XTP XTQ XTR XTS XUP XUQ XUR XUS XVP XVQ XVR XVS YTP YTQ YTR YTS YUP YUQ YUR YUS YVP YVQ YVR YVS ZTP ZTQ ZTR ZTS ZUP ZUQ ZUR ZUS ZVP ZVQ ZVR ZVS
时间复杂度:上述代码的时间复杂度为O(4n),其中n被视为输入数字的位数。