//引數說明:x,y,z柱子名,num盤子(帶編號),len盤子陣列長度,cnt柱子上的盤子數,step步驟
void hanoi(char x, char y, char z, int *num, int len, int cnt, int *step) {
if (cnt==1) {
printf("第%d步: move %d, %c -> %c\n", *step, num[cnt-1], x, z);
(*step)++;
return;
}
hanoi(x, z, y, num, len, cnt-1, step);
printf("第%d步: move %d, %c -> %c\n", *step, num[cnt-1], x, z);
(*step)++;
hanoi(y, x, z, num, len, cnt-1, step);
}
int main() {
int num[]={5,4,3,2,1}, len=5, cnt=5, step=1; //num陣列就是盤子編號,從上到下逐漸減小(從下到上逐漸增大)
char x='x', y='y', z='z';
hanoi(x, y, z, num, len, cnt, &step);
return 0;
}
uj5u.com熱心網友回復:
說白了
hanoi(char one, char tow, char three, int n) 這部分的引數不變
hanoi(char x, char y, char z, int *num, int len, int cnt, int *step)
只是多了num,len和step來控制列印的步數和盤子序號,所以它還是原來漢塔塔的思路,只不過多了一些列印控制
uj5u.com熱心網友回復:
它跟盤子大小沒有關系,就是每個塔的序號都是從下往上增大
看你發的圖片,是想要這樣的結果吧(就是控制列印序號而已,遞回本身沒變)
盤子編號從下到上逐漸增大
//引數說明:x,y,z柱子名,num盤子(帶編號),len盤子陣列長度,cnt柱子上的盤子數,step步驟
void hanoi(char x, char y, char z, int *num, int len, int cnt, int *step) {
if (cnt==1) {
printf("第%d步: move %d, %c -> %c\n", *step, num[cnt-1], x, z);
(*step)++;
return;
}
hanoi(x, z, y, num, len, cnt-1, step);
printf("第%d步: move %d, %c -> %c\n", *step, num[cnt-1], x, z);
(*step)++;
hanoi(y, x, z, num, len, cnt-1, step);
}
int main() {
int num[]={5,4,3,2,1}, len=5, cnt=5, step=1; //num陣列就是盤子編號,從上到下逐漸減小(從下到上逐漸增大)
char x='x', y='y', z='z';
hanoi(x, y, z, num, len, cnt, &step);
return 0;
}
謝謝,大佬。
uj5u.com熱心網友回復:
它跟盤子大小沒有關系,就是每個塔的序號都是從下往上增大
看你發的圖片,是想要這樣的結果吧(就是控制列印序號而已,遞回本身沒變)
盤子編號從下到上逐漸增大
//引數說明:x,y,z柱子名,num盤子(帶編號),len盤子陣列長度,cnt柱子上的盤子數,step步驟
void hanoi(char x, char y, char z, int *num, int len, int cnt, int *step) {
if (cnt==1) {
printf("第%d步: move %d, %c -> %c\n", *step, num[cnt-1], x, z);
(*step)++;
return;
}
hanoi(x, z, y, num, len, cnt-1, step);
printf("第%d步: move %d, %c -> %c\n", *step, num[cnt-1], x, z);
(*step)++;
hanoi(y, x, z, num, len, cnt-1, step);
}
int main() {
int num[]={5,4,3,2,1}, len=5, cnt=5, step=1; //num陣列就是盤子編號,從上到下逐漸減小(從下到上逐漸增大)
char x='x', y='y', z='z';
hanoi(x, y, z, num, len, cnt, &step);
return 0;
}
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......