用c语言递归电话号码对应的字符组合。题目:在电话或者手机上,一个数字如2对应着字母ABC,7对应着PQRS。那么数字串27所对应的字符的可能组合就有3*4=12种(如AP,BR等)。现在输入一个3到11位长的电话号码,请打印出这个电话号码所对应的字符的所有可能组合和组合数。
时间: 2024-09-27 15:06:56 浏览: 21
在C语言中,我们可以使用递归的方式来解决这个问题。这是一个典型的动态规划问题,可以利用字符串的长度作为递归的基础,每次递归处理一位数字,并将其转换为字符数组。这里是一个简单的解决方案:
```c
#include <stdio.h>
#include <string.h>
// 字符映射表
char digit_map[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S'};
int len;
void print_combinations(char *number, int index) {
if (index == len) {
printf("%s\n", number);
return;
}
// 对当前数字的每个可能字符进行递归调用
for (int i = 0; i < 4; ++i) {
char new_number[len + 1];
strcpy(new_number, number); // 拷贝前缀
new_number[index] = digit_map[i]; // 插入当前字符
print_combinations(new_number, index + 1); // 继续处理下一个位置
}
}
int main() {
char input[12];
printf("请输入电话号码(3-11位): ");
scanf("%s", input);
len = strlen(input); // 获取输入字符串的长度
if (len < 3 || len > 11) {
printf("无效的电话号码长度。\n");
return 1;
}
print_combinations("", 0); // 开始递归
printf("总组合数: %d\n", pow(4, len)); // 计算所有组合总数
return 0;
}
```
阅读全文