看板 Prob_Solve 關於我們 聯絡資訊
※ [本文轉錄自 C_and_CPP 看板 #1ElEpQow ] 作者: wa007123456 (大笨羊) 看板: C_and_CPP 標題: [問題] 如何實做一個不會重複的"六進位"? 時間: Fri Nov 11 17:37:27 2011 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 是這樣的,我想寫一個程式,裡面有1~6的字元 最高位數是6位,且陣列上的值不可重複 例如: arr[0][1][2][3][4][5] <=正確! arr2[0][0][1][2][3][4] <=錯誤! 小弟其實想用程式去算出一個題目 就是有一個密碼箱,有六個數字要填,其中1,2不能排首兩位 3,4不能排中間兩位 5,6不能排後面兩位 我大概知道是6!=720 是全部的可能(未含條件) 而含條件後的答案是80 (經過排列組合的計算) 我已經想了一個下午了.... 但是還是沒有頭緒 小弟我是個初學者@@ 有請先輩們賜教>< 感謝 ps:這是我突發奇想的問題... 另外有沒有大大可以推薦有關"資料結構"的書籍呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.228.221.15 ※ 編輯: wa007123456 來自: 125.228.221.15 (11/11 17:40)
x000032001:排列組合喔... 11/11 17:43
x000032001:我可以說版規2嗎..XD 請附上自己的想法 11/11 17:45
可能要先寫好排列組合常用的運算 像是C(X,Y) ,P(X)...還有數階的函式(用遞迴) 但是最大的問題就是 程式沒辦法做"分類"的動作 他只能很暴力的算出來吧@@? 畢竟電腦是計算機.....但是不寫出這題我不會死心的.. ※ 編輯: wa007123456 來自: 125.228.221.15 (11/11 17:48)
LawlietDo:才6!就六層loop 最後一層做判斷 符合的話就輸出阿.... 11/11 17:49
我也是寫了六個for.. 但是問題就是在..每位不能有重複的數字@@ 不然判斷 count 會多出許多不正確的答案@@
james732:最暴力的方式就是把所有可能的解都生出來再刪掉...XD 11/11 17:51
※ 編輯: wa007123456 來自: 125.228.221.15 (11/11 17:52)
x000032001:開個陣列記錄有沒有被用過不就得了 11/11 17:52
x000032001:搞成全域然後遞迴一下 就比for高級了"一點點".... 11/11 17:53
tropical72:這不就是 next_perm 的東西嗎? 11/11 17:54
x000032001:對阿(死) 我是覺得你先把程式寫出來 再去改他 11/11 17:54
wa007123456:樓上@@ 那是甚麼? 11/11 17:55
james732:我很不擅長這種問題耶,有需要加強嗎...? 11/11 17:55
tropical72:oh,有條件限制的,我的作法和 james 一樣,合條件的話才 11/11 17:55
x000032001:6個for也好阿 看看哪邊重複 哪邊多餘 再做修正 11/11 17:55
james732:原po可以拿「c++ next_permutation」去google看看 11/11 17:55
wa007123456:阿 有一點頭緒了! 11/11 17:56
x000032001:讓他練練吧 雖然我以前也都#include <algorithm> ... 11/11 17:56
wa007123456:先記錄全部的數字 把不合格的篩檢 最後在弄上分類 11/11 17:56
tropical72:加到 solution,類似的東西 :#1DU99hiU ,最後慢慢check. 11/11 17:56
tropical72:補一下, 轉去 Prob_Solve 可能較適合。 11/11 18:08
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: wa007123456 (125.228.221.15), 時間: 11/11/2011 18:11:40
springman:這讓我想到大一時在寫八皇后的問題,怎麼都想不出來 11/11 20:33
springman:後來有人提到用遞迴,將所有情形都找出來 11/11 20:33
springman:然後每一種檢查是否符合條件 11/11 20:33
springman:原以為只能這麼做,結果後來看到一位天才的同學 11/11 20:34
springman:用八層迴圈一樣很快就跑出來,真的很天才。 11/11 20:34