作者wa007123456 (大笨羊)
看板Prob_Solve
標題Fw: [問題] 如何實做一個不會重複的"六進位"?
時間Fri Nov 11 18:11:40 2011
※ [本文轉錄自 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)
1F:→ x000032001:排列組合喔... 11/11 17:43
2F:→ x000032001:我可以說版規2嗎..XD 請附上自己的想法 11/11 17:45
可能要先寫好排列組合常用的運算
像是C(X,Y) ,P(X)...還有數階的函式(用遞迴)
但是最大的問題就是 程式沒辦法做"分類"的動作
他只能很暴力的算出來吧@@?
畢竟電腦是計算機.....但是不寫出這題我不會死心的..
※ 編輯: wa007123456 來自: 125.228.221.15 (11/11 17:48)
3F:→ LawlietDo:才6!就六層loop 最後一層做判斷 符合的話就輸出阿.... 11/11 17:49
我也是寫了六個for..
但是問題就是在..每位不能有重複的數字@@
不然判斷 count 會多出許多不正確的答案@@
4F:→ james732:最暴力的方式就是把所有可能的解都生出來再刪掉...XD 11/11 17:51
※ 編輯: wa007123456 來自: 125.228.221.15 (11/11 17:52)
5F:→ x000032001:開個陣列記錄有沒有被用過不就得了 11/11 17:52
6F:→ x000032001:搞成全域然後遞迴一下 就比for高級了"一點點".... 11/11 17:53
7F:→ tropical72:這不就是 next_perm 的東西嗎? 11/11 17:54
8F:→ x000032001:對阿(死) 我是覺得你先把程式寫出來 再去改他 11/11 17:54
9F:→ wa007123456:樓上@@ 那是甚麼? 11/11 17:55
10F:→ james732:我很不擅長這種問題耶,有需要加強嗎...? 11/11 17:55
11F:→ tropical72:oh,有條件限制的,我的作法和 james 一樣,合條件的話才 11/11 17:55
12F:→ x000032001:6個for也好阿 看看哪邊重複 哪邊多餘 再做修正 11/11 17:55
13F:→ james732:原po可以拿「c++ next_permutation」去google看看 11/11 17:55
14F:→ wa007123456:阿 有一點頭緒了! 11/11 17:56
15F:→ x000032001:讓他練練吧 雖然我以前也都#include <algorithm> ... 11/11 17:56
16F:→ wa007123456:先記錄全部的數字 把不合格的篩檢 最後在弄上分類 11/11 17:56
17F:→ tropical72:加到 solution,類似的東西 :#1DU99hiU ,最後慢慢check. 11/11 17:56
18F:→ tropical72:補一下, 轉去 Prob_Solve 可能較適合。 11/11 18:08
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: wa007123456 (125.228.221.15), 時間: 11/11/2011 18:11:40
19F:推 springman:這讓我想到大一時在寫八皇后的問題,怎麼都想不出來 11/11 20:33
20F:→ springman:後來有人提到用遞迴,將所有情形都找出來 11/11 20:33
21F:→ springman:然後每一種檢查是否符合條件 11/11 20:33
22F:→ springman:原以為只能這麼做,結果後來看到一位天才的同學 11/11 20:34
23F:→ springman:用八層迴圈一樣很快就跑出來,真的很天才。 11/11 20:34