电话号码对应的字符组合

电话号码对应的字符组合:在电话或者手机上,一个数字如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;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值