电话号码对应的字符组合:在电话或者手机上,一个数字如2对应着字母ABC,7对应着PQRS。那么数字串27所对应的字符的可能组合就有3*4=12种(如AP,BR等)。现在输入一个3到11位长的电话号码,请打印出这个电话号码所对应的字符的所有可能组合和组合数。
/*
File name:电话号码对应的字符组合.cpp
Author:杨柳
Date:2017/5/23
IDE:DEV-c++
*/
/*
0:"" 1:"" 2:ABC 3:DEF 4:GHI 5:JKL 6:MNO 7:PQRS 8:TUV 9:WXYZ
本递归算法思想:
例如:23
1.show(0,2)-> output[0]=A-> show(1,2)-> 1!=2-> output[1]=D->
2.k=1 show(2,2)-> 2=len-> 输出AD-> i+1-> output[1]=E-> show(2,2)-> 2=len-> 输出AE i=2-> output[1]=F-> show(2,2)-> 2=len-> 输出AF
3.再回到k=0-> i=1 output[0]=ch[0][1]=B 输出BD,BE,BF i=2 输出CD,CE,CF
*/
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const char ch[10][10]={
"",//0
"",//1
"ABC",//2
"DEF",//3
"GHI",//4
"JKL",//5
"MNO",//6
"PQRS",//7
"TUV",//8
"WXYZ"//9
};
const int total[10]={0,0,3,3,3,3,3,4,3,4}; //各个数字代表的字符总数构成的数组
char input[20]; //保存输入电话字符数组
//int number[20];
char output[20]; //输出可能字符组合
void show(int k,int len){
if(k==len){
output[len]='\0'; //设为结束标志,输出
printf("%s\n",output);
return ;
}
for(int i=0;i<total[input[k]];i++){
output[k]=ch[input[k]][i];
show(k+1,len);
}
}
int main(){
printf("请输入电话号码:\n");
scanf("%s",input); //输入电话字符数组
int len=strlen(input);
int number[len];
int sum=1;
for(int i=0;i<len;i++){
input[i]-='0'; //char类型转换成int数组
sum*=total[input[i]];
// cout<<number[i]<<endl;
}
show(0,len);
printf("总的组合数:%d\n",sum);
return 0;
}
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const char ch[10][10]={
"",//0
"",//1
"ABC",//2
"DEF",//3
"GHI",//4
"JKL",//5
"MNO",//6
"PQRS",//7
"TUV",//8
"WXYZ"//9
};
const int total[10]={0,0,3,3,3,3,3,4,3,4}; //各个数字代表的字符总数构成的数组
char input[20]; //保存输入电话字符数组
//int number[20];
char output[20]; //输出可能字符组合
void show(int k,int len){
if(k==len){
output[len]='\0'; //设为结束标志,输出
printf("%s\n",output);
return ;
}
for(int i=0;i<total[input[k]];i++){
output[k]=ch[input[k]][i];
show(k+1,len);
}
}
int main(){
printf("请输入电话号码:\n");
scanf("%s",input); //输入电话字符数组
int len=strlen(input);
int number[len];
int sum=1;
for(int i=0;i<len;i++){
input[i]-='0'; //char类型转换成int数组
sum*=total[input[i]];
// cout<<number[i]<<endl;
}
show(0,len);
printf("总的组合数:%d\n",sum);
return 0;
}