56 漢諾塔問題的第m步
給定三根杆a、b、c和大小不同的幾個盤子。這些盤子按尺寸遞減順序套在a桿上,最小的在最上面。現在的任務是把這些盤子從a杆移到c桿且保持原來堆放順序。在實現任務時,每次只能移動乙個盤子,且任何時刻不允許大的盤子放在小的盤子上面,b杆可以作為輔助存放杆。求:總共有n個圓盤時,搬動過程中的第m步是從哪個桿到哪個杆。
你的程式需要從標準輸入裝置(通常為鍵盤)中讀入多組測試資料。每組輸入資料由一行組成,每行輸入乙個整數表示盤子數n,1≤n≤10,以及步數m,兩個資料之間以乙個空格分隔。行首和行尾沒有多餘的空格,兩組資料之間也沒有多餘的空行。
對每組測試資料,你的程式需要向標準輸出裝置(通常為啟動該程式的終端)依次輸出一行對應的答案,該行中輸出第m步移動的情況,如第m步是從a移到b,則輸出「a–b」(不包括引號)。如果移動過程不存在第m步,則輸出「none」 (不包括引號)。
兩組資料之間無空行,第一組前及最後一組後也無空行。
2 32 4
b–cnone
(這裡參考了這位大佬的思路,總的思路就是先把a上的前n-1塊移動到b上,然後把最後塊移動到c上,再把b上的n-1塊移動到c上。
```c
#include
int count=0;
int m;
void
hnt(
int n,
char a,
char b,
char c)
return;}
hnt(n-
1,a,c,b)
; count++;if
(count==m)
hnt(n-
1,b,a,c);}
intmain()
hnt(n,
'a',
'b',
'c');if
(countprintf
("none\n");
}return0;
}
東華OJ高階56 漢諾塔問題的第m步
問題描述 給定三根杆a b c和大小不同的幾個盤子。這些盤子按尺寸遞減順序套在a桿上,最小的在最上面。現在的任務是把這些盤子從a杆移到c桿且保持原來堆放順序。在實現任務時,每次只能移動乙個盤子,且任何時刻不允許大的盤子放在小的盤子上面,b杆可以作為輔助存放杆。求 總共有n個圓盤時,搬動過程中的第m步...
OJ漢諾塔問題
題目 如圖所示的三根針,其中a針上穿好了由大到小的64片金片,不論白天黑夜,總有乙個和尚在按照下面的法則移動金片 一次只移動一片,不管在哪根針上,小片必須在大片上面。和尚們預言,當所有的金片都從a針移到c針上時,世界就將在一聲霹靂中消失,這就是所謂的漢諾塔。請程式設計求出將a針上所有金片移到c上的步...
56 漢諾塔問題的第m步
56 漢諾塔問題的第m步 問題描述 給定三根杆a b c和大小不同的幾個盤子。這些盤子按尺寸遞減順序套在a桿上,最小的在最上面。現在的任務是把這些盤子從a杆移到c桿且保持原來堆放順序。在實現任務時,每次只能移動乙個盤子,且任何時刻不允許大的盤子放在小的盤子上面,b杆可以作為輔助存放杆。求 總共有n個...