1. 程式人生 > >電話號碼對應的字元組合

電話號碼對應的字元組合

在電話或者手機上,一個數字如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;

	}