看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《wa007123456 (大笨羊)》之銘言: : 開發平台(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:這是我突發奇想的問題... : 另外有沒有大大可以推薦有關"資料結構"的書籍呢? 可以找一下 C++/STL 中的 next_permutation() 演算法,非常好用 :) 貼一下我寫的程式: // code-6.cpp // // 2011/11/12 by Timothy #include <iostream> #include <algorithm> #include <vector> using namespace std; bool valid(vector<int>* V); int main() { int i; int cnt; bool OK; vector<int> V; for ( i = 0; i < 6; i++ ) V.push_back(i+1); cnt = 0; do { OK = valid(&V); if ( OK ) { for ( i = 0; i < V.size(); i++ ) cout << V[i]; cout << endl; cnt++; } } while ( next_permutation(V.begin(),V.end()) ); cout << "There are " << cnt << " possible answers." << endl; system("pause"); return ( 0 ); } bool valid(vector<int>* V) { bool b1,b2,b3,b4,b5,b6; bool fail,res; b1 = ( (*V)[0] == 1 || (*V)[1] == 1 ); b2 = ( (*V)[0] == 2 || (*V)[1] == 2 ); b3 = ( (*V)[2] == 3 || (*V)[3] == 3 ); b4 = ( (*V)[2] == 4 || (*V)[3] == 4 ); b5 = ( (*V)[4] == 5 || (*V)[5] == 5 ); b6 = ( (*V)[4] == 6 || (*V)[5] == 6 ); fail = b1 || b2 || b3 || b4 || b5 || b6; res = ! fail; return ( res ); } 執行結果: 345612 345621 346512 346521 351624 351642 352614 352641 356124 356142 356214 356241 361524 361542 362514 362541 365124 365142 365214 365241 435612 435621 436512 436521 451623 451632 452613 452631 456123 456132 456213 456231 461523 461532 462513 462531 465123 465132 465213 465231 531624 531642 532614 532641 536124 536142 536214 536241 541623 541632 542613 542631 546123 546132 546213 546231 561234 561243 562134 562143 631524 631542 632514 632541 635124 635142 635214 635241 641523 641532 642513 642531 645123 645132 645213 645231 651234 651243 652134 652143 There are 80 possible answers. 請按任意鍵繼續 . . . -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.189.226
wa007123456:推一下! 順便奉上1000P 11/12 10:23
wa007123456:不過有兩個標頭檔我尚未看過@@ 11/12 10:24
wa007123456:#include <algorithm> 演算法@@? 11/12 10:26
wa007123456:這個裡面包含了甚麼有趣的東西呢? 11/12 10:26
wa007123456:#include <vector> vector好像是維度@@ 又是做甚麼的 11/12 10:27
wa007123456:還有我看到<>符號了@@ C++也支援泛型嗎? 11/12 10:28
james732:algorithm http://goo.gl/ZOh6e 11/12 10:34
james732:vector http://goo.gl/tzMZF http://goo.gl/Gne0d 11/12 10:35
james732:<> 這叫 template http://goo.gl/t0nrX (資料太多了) 11/12 10:36
wa007123456:感謝J大... 11/12 10:49
james732:去買本C++ Primer吧 XD 11/12 10:51
wa007123456:其實我英文不好XD.. 11/12 10:53
james732:C++ Primer有中譯版,翻得還不錯 11/12 10:54
wa007123456:我想我要去好好了解一番@@ 11/12 10:54
wa007123456:真的嗎@@ 我去書店網站看看 11/12 10:54
loveme00835:花一個月STL就可以完全學起來(算小的), 我英文也不好 11/12 16:08
james732:完全學起來? 不過STL確實不像boost那麼浩大... 11/12 16:09
angleevil:一個月...我很多stl的工具還沒用過. 11/12 20:45