看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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