藍橋杯 演算法訓練 Hanoi問題

2021-10-04 09:16:05 字數 827 閱讀 2236

如果將課本上的hanoi塔問題稍做修改:仍然是給定n只盤子,3根柱子,但是允許每次最多移動相鄰的m只盤子(當然移動盤子的數目也可以小於m),最少需要多少次?

例如n=5,m=2時,可以分別將最小的2個盤子、中間的2個盤子以及最大的乙個盤子分別看作乙個整體,這樣可以轉變為n=3,m=1的情況,共需要移動7次。

輸入:輸入資料僅有一行,包括兩個數n和m(0<=m<=n<=8)

輸出:僅輸出乙個數,表示需要移動的最少次數

輸入樣例:

5 2輸出樣例:

7這道題其實和典型的漢諾塔問題沒什麼區別,看起來多了乙個限制條件——可以將m個圓盤看做是乙個整體。

但是實際上就類似於將n個圓盤劃分成了n/m的情況,同時不滿足n剛好整除m(n%m!=0)的情況下就需要將n/m+1,即多出來的部分也算作乙個圓盤即可。

分析我就不寫了,和典型的漢諾塔一樣,詳看部落格–漢諾塔

#include

int num=0;

void

move

(char a,

int n,

char c)

void

hanoi

(int n,

char x,

char y,

char z)

}int

main()

//加上判斷是否整除來確定最終的「圓盤」個數

hanoi

(n,'a'

,'b'

,'c');

printf

("%d"

,num)

;return0;

}

藍橋杯試題 演算法訓練 Hanoi問題 C C

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 如果將課本上的hanoi塔問題稍做修改 仍然是給定n只盤子,3根柱子,但是允許每次最多移動相鄰的m只盤子 當然移動盤子的數目也可以小於m 最少需要多少次?例如n 5,m 2時,可以分別將最小的2個盤子 中間的2個盤子以及最大的乙個盤...

演算法訓練 Hanoi問題

問題描述 如果將課本上的hanoi塔問題稍做修改 仍然是給定n只盤子,3根柱子,但是允許每次最多移動相鄰的m只盤子 當然移動盤子的數目也可以小於m 最少需要多少次?例如n 5,m 2時,可以分別將最小的2個盤子 中間的2個盤子以及最大的乙個盤子分別看作乙個整體,這樣可以轉變為n 3,m 1的情況,共...

藍橋杯 演算法訓練 Anagrams問題

演算法訓練 anagrams問題 時間限制 1.0s 記憶體限制 512.0mb 問題描述 anagrams指的是具有如下特性的兩個單詞 在這兩個單詞當中,每乙個英文本母 不區分大小寫 所出現的次數都是相同的。例如,unclear 和 nuclear rimon 和 minor 都是anagrams...