[問題] 河內塔問題

看板C_and_CPP作者 (NANA真好看~^^)時間13年前 (2011/07/23 14:37), 編輯推噓0(0011)
留言11則, 2人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev c++ 問題(Question): 如下圖,執行到(5)後就不會再移動了,不知道問題出在哪? 1 2 => 2 => => 1 => 1 3 3 1 321 32 23 === === === === === (1) (2) (3) (4) (5) 程式碼(Code):(請善用置底文網頁, 記得排版) #include<iostream> #include<iomanip> using namespace std; int n=3,mid,height[3]={3,0,0},s[3][3],nnum=n; void honai(int start,int end,int num) //從start搬到end,共搬num個 { if(num>1) { if(start+end==1){mid=2;} else if(start+end==2){mid=1;} else if(start+end==3){mid=0;} nnum=num; num--; honai(start,mid,num); honai(start,end,nnum-num); honai(mid,end,num); } else { height[end]++; s[n-height[end]][end]=s[n-height[start]][start]; s[n-height[start]][start]=0; height[start]--; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { (s[i][j]==0?(cout <<"|"):(cout << s[i][j])); } cout << endl; } cout << "===" << endl << endl; } } int main() { int i; for(i=0;i<n;i++) { s[i][0]=i+1; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { (s[i][j]==0?(cout <<"|"):(cout << s[i][j])); } cout << endl; } cout << "---" << endl << "---" << endl << endl; honai(0,2,n); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.0.208

07/23 15:09, , 1F
....
07/23 15:09, 1F

07/23 15:20, , 2F
let nnum declared in honai...
07/23 15:20, 2F

07/23 15:26, , 3F
n-height[]...
07/23 15:26, 3F

07/23 15:29, , 4F
ignore the least one
07/23 15:29, 4F
搞定了 把mid定義在函數內就好了 ※ 編輯: q0300768 來自: 219.84.0.208 (07/23 15:42)

07/23 15:50, , 5F
the mid is useless.just try (start+end)^3 ...
07/23 15:50, 5F

07/23 15:50, , 6F
or 3-(start+end) ...
07/23 15:50, 6F
感謝!! 沒注意到可省略! ※ 編輯: q0300768 來自: 219.84.0.208 (07/23 15:53)

07/23 19:45, , 7F
要小心n不一定會比nnum先初始化,寫在最外面會很麻煩。
07/23 19:45, 7F

07/23 19:45, , 8F
請直接寫nnum=3或是在其他函式裡面寫nnum=n
07/23 19:45, 8F

07/23 20:01, , 9F
(啊對不起我上面是在說 C 不是 C++, 請忽略 orz)
07/23 20:01, 9F

07/23 20:03, , 10F
如果是 C++, 目前程式是安全的,但還是建議不要這樣寫 :P
07/23 20:03, 10F

07/23 20:04, , 11F
C++ 規則有一點多,要講清楚有點麻煩 orz
07/23 20:04, 11F
文章代碼(AID): #1EAcmRa1 (C_and_CPP)
文章代碼(AID): #1EAcmRa1 (C_and_CPP)