東華大學OJ56 漢諾塔移動問題

2021-10-05 09:57:47 字數 1021 閱讀 8792

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個...