推 deangogi:感謝指教 04/01 12:28
※ 引述《deangogi (一個憤青的概念)》之銘言:
: STL裡的next_permutation()似乎是把原來的字串去做排列而已 也就是最多6!情況
: 而我所想要的功能需要求出C(6取一)*35 + C(6取2)*35*35種情況
: 請問有什麼方法可以實現?
排列(permuation)和組合(combination)是兩件不同事情
next_permuation是找到下一個排列,跟組合無關
想求所有組合,方法很多,例如"二進位數字逐次加一"、Gray code、Banker's sequence
想求剛好取k個的所有組合,可以參考下面這段程式碼
// nCk
for (int comb = (1 << k) - 1; comb < 1 << n;) {
print comb in binary;
int x = comb & -comb, y = comb + x;
comb = ((comb & ~y) / x >> 1) | y;
}
或者用前面板友推文說的,000001和000011分別拿去做next_permutation
以上
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.78.43
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1396320341.A.493.html
※ 編輯: DJWS (111.250.78.43), 04/01/2014 11:04:02