《程式設計之美》 電話號碼對應英語單詞

2021-07-06 08:30:39 字數 1973 閱讀 4605

問題:

**的號碼盤一般可以用於輸入字母,如用2可以輸入a,b,c,用3可以輸入d,e,f等。

對於號碼5869872,可以依次輸出其代表的所有字母組合。如:jtmwtpa,jtmwtpb………

1、您能否可以根據這樣的對應關係設計乙個程式,盡可能快地從這些字母組合中找到乙個有意義的單詞來描述乙個**號碼呢?如:可以用單詞「computer」來描述號碼26678837。

分析與解法:

對於問題1,不妨掏出**來研究,我們可以發現,除了0,1之外,其他數字上最少都有3個字元,其中7和9上有4個字元,我們可以假設0,1都是空字元

首先將問題簡單化,若**號碼只有一位數,比如說4,那麼其代表的單詞為g,h,i,據此可以畫出一顆排列樹,如圖

接著若**號碼公升級到兩位數,比如42,又將如何呢?分兩步走,從左到右,在選擇乙個第一位數字所代表的字元的基礎上,遍歷第二位數字所代表的字元,直到遍歷完第一位數字代表的所有字元。就拿42來說,4所能代表的字元為ghi,2所能代表的字元為abc,首先讓4代表g,接著遍歷2所能代表的所有字元,即可得到ga,gb,gc,然後再讓4代表h,再次遍歷2所能代表的所有字元,即可得到ha,hb,hc,最後讓4代表i,那麼同理可得到ia,ib,ic。如圖

/*將每個數字所能代表的字母記錄在乙個二維陣列c中,其中0、1代表空字元*/

char c[10][10] =

;/*將每個數字所能代表的字母的總數記錄在total陣列中*/

int total[10] = ;

/*將**號碼記錄在number陣列中*/

int number[telllength] = ;

/*將數字目前所代表的字母在c陣列中的列數下標記錄在answer陣列中*/

/*初始化時answer[i] = 0*/

int answer[telllength] = ;

舉例,若number[0] = 4, 即**號碼的第乙個數字是4,若answer[0] = 2,則4目前所代表的字母是

c[number[0]][answer[0]] = c[4][2] = 『i』

先分析簡單的例子,假設**號碼有3位

for(answer[1] = 0; answer[0] < total[number[1]]; answer[1]++)

for(answer[2] = 0; answer[0] < total[number[2]]; answer[2]++)

for(int i = 0; i < 3; i++)

printf("%c\n", c[number[i]][answer[i]]);

但是若**號碼有n位,則需要n層迴圈,於是改進後的**如下

while(true)

else

}if(index

< 0)

break;

}

/*index是指對**號碼的第幾位進行操作,n是**號碼的位數*/

/*遞迴初始呼叫為recursivesearch(number, answer, 0, n)*/

void recursivesearch(int* number, int* answer, int

index, int n)

for(answer[index] = 0; answer[index] < total[number[index]]; answer[index]++)

recursivesearch(number, answer, index + 1, n);

}

相當於是對之前n層迴圈使用遞迴方法的改

程式設計之美 電話號碼對應英語單詞

問題描述 的號碼盤上乙個數字對應著幾個字母,一串數字對應著幾種字母的組合。現在給定一組數字,列出對應的字母的組合。思路 例如 4對應鍵盤上 ghi,2對應鍵盤上 abc 數字 42 的組合對應的字串,用樹的表現形式 424 g h i 2 a b a b a b 結果 ga,gb,ha,hb,ia,...

程式設計之美之電話號碼對應英語單詞

題目一 根據 上字母和數字的對應關係,用乙個有意義的單詞來表述乙個 號碼,如用computer表示26678837 題目二 反過來,給定乙個 號碼,是否可以用乙個單詞來表示呢?怎樣表示最快呢?顯然不是所有的 號碼都可以對應到單詞上去 given a digit string,return all p...

程式設計之美 3 2 電話號碼對應英語單詞

的號碼盤一般可以用於輸入字母。如用2可以輸入a b c,用3可以輸入d e f等。對於號碼5869872,可以依次輸出其代表的所有字母組合。如 jtmwtpa jtmwtb 1 設計程式,盡可能從這些字母組合中,找到乙個有意義的單詞來表述乙個 號碼。如單詞 computer 來描述號碼2667883...