電話號碼對應的字元組合
阿新 • • 發佈:2018-12-22
在電話或者手機上,一個數字如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; }