在电话或者手机上,一个数字如2对应着字母ABC,7对应着PQRS。那么数字串27所对应的字符的可能组合就有3*4=12种(如AP,BR等)。现在输入一个3到11位长的电话号码,请打印出这个电话号码所对应的字符的所有可能组合和组合数。
代码如下:
/*
author:赵卓屹
date:2018/11/16
九宫格字母组合
*/
#include<iostream>
#include<stdlib.h>
using namespace std;
int _n = 0; //统计组合字母的个数,用于分割组合
char c[10][10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };//数字代表的字符
int total[10] = { 0,0,3,3,3,3,3,4,3,4 };//数字代表的字符个数
/*
number[]:传入数字数组
answer[]:对应字幕下标
index:索引第index个字母
n:号码位数
*/
void combine(int number[], int answer[], int index, int n)
{
if (index == n)//判断是否为最后一位
{
for (int i = 0; i < n; i++) {
_n++;
printf("%c", c[number[i]][answer[i]]);
if (_n%n == 0) //如果膜号码个数n为0则换行
printf("\n");
}
return;
}
for (answer[index] = 0; answer[index] < total[number[index]]; answer[index]++)
combine(number, answer, index + 1, n);
}
int main()
{
int number[11];//储存电话号码
int n, i;
int answer[11] = {};//数字代表的字符的位置
printf("请输入电话号码的长度:\n");
scanf("%d", &n);//输入电话号码位数
printf("请输入一个电话号码:\n");
for (i = 0; i<n; i++)
scanf("%d", number + i);
combine(number, answer, 0, n);
return 0;
}