※ 引述《sjgau (sjgau)》之銘言:
: 問題(Question):
: 1 - 49, 選出 八個號碼,不重複。
: 這部份很簡單。
: 接著,產生所有的組合列印,
: 八選六,暫時沒有頭緒?
: 假設,選出來的號碼是
: 1,2,3,4,5,6,7,8
: 組合的第一位數,
: 1 - 8, 都可以
: 假設 1, 固定下來,接著是 第二位數
: 2 - 8 ,都可以
: 這種想法,如何寫成 程式?
我想,實作的時刻又來了。
關鍵點在於不管N是多少,只要大於等於M,我們關心的是M的變化。
也就是說,陣列M的元素變化是N的索引變化。
N = 7, M = 3
N
index 0 1 2 3 4 5 6
value 25 11 33 44 23 07 01
M
index 0 1 2
value 0 1 2 => 0 1 3 => 0 1 4 => 0 1 5 => ... => 0 2 3 => ...
等等族繁不即備載
所以產生的組合就會是N[ M[ i ] ]
而你會看到每次變動只有一個數而已。
且不難發現這有遞迴的規律。
給予lt和rt代表左邊的指標和右邊的指標。
rt的value會一直加1,如果rt的value等於n,
那就是lt的value加1,lt往右一直到rt設定value為累加1。
如果lt的value加1等於n,lt的index減1,後續作一貫動作。
程式碼:
http://pastie.org/1954661
http://nopaste.csie.org/4f6e3
使用說明:
n最大是48,可以是任意大於m的數字。
不一定侷限於樂透包牌,
但如果要模擬樂透包牌,m只要固定為6就可以了。
以下都是測資的sample:
9 6
8 1
48 6 (我希望你跑得完)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.127.249