2014-09-19 28 views
-2

我最近遇到了一個看起來很簡單的問題,但事實證明,令人難以置信的是,我無法入睡2天。變量字母排列算法 - 簡單但令人難以置信的

這裏的問題是:

可變將由字符數量 - >說$ I = 5。您需要打印每個可能的字母組合,從$ i = 2到$ i = 5。

爲$ I = 5的輸出需要是: AA AB 交流 ... ZZ AAA AAB ... ZZZ AAAA AAAB .... ZZZZ AAAAA ..... ZZZZZ

您需要使用只爲循環foreachwhile循環實現此目的(不使用要使用的函數)併爲每個字符串輸出PRINT,而不是保存在數組中。 請不要在for循環內for循環中使用for循環,因爲$ i可以是100或200.

您可以從'a'到'z'獲取一組字母數組。有人能幫我解決這個問題嗎?

+0

我搜索了可能的解決方案stackoverflow,但發現人們非常熱衷於使用**遞歸函數**正如我所提到的,我不應該使用函數,因爲我不想存儲這些字符串,而是隻是打印它們。 我已經嘗試使用兩個標誌與行數= $ i的數組,只是打印所有數組的[0]元素。但是在第一行之後,這一切都變得很難處理。 – fineTuneFork 2014-09-19 11:14:44

回答

1

在循環之前,您有一個數組aa。在循環中查看數組。

如果數組是所有z的序列,則用長度增加1的所有a的序列替換內容。如果新數組的長度大於最大值,則退出循環。

否則看陣列時,這始終是在形式Xz*,其中X是除了z任何字母,後面的零個或多個字母z的尾部。用Ya*替換該數組的尾部,其中YX後面的字母,即。 Y = X + 1,a*是字母a的序列,其長度與字母z的原始序列完全相同(請記住長度可以爲零)。

在任何情況下寫入數組的新內容輸出並重復循環。

你只需要兩個循環。 Outer是在每次迭代中打印新值的主循環。 Inner是將所有z轉換爲a的循環。

+0

優秀的解決方案!我得到了我需要的輸出。對於正在尋找解決方案的每個人 - >這裏是https://gist.githubusercontent。com/trocker/ed43d3289d84de46f5dc/raw/9658db5e2e8fbb846dd51a6d151423513bb265d3/gistfile1.txt – fineTuneFork 2014-09-19 11:40:38

+0

@fineTuneFork我沒有給出代碼,因爲這個問題感覺像是作業或某種學習練習。您可以在自己的附加答案中提供代碼。我只是注意到PHP中的字符串遞增運算符足夠神奇,它也將'zz'變成'aaa'。如果這是作業,我認爲這些代碼不會被老師接受。 – Dialecticus 2014-09-19 11:52:55

+0

如果這是作業,我肯定會複製它,而不是自己編寫代碼......哈哈哈......你有沒有像這些有趣的問題的任何來源,但? (我現在是一個十年的軟件專家) – fineTuneFork 2014-09-19 15:27:02

相關問題