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

2021-10-03 17:36:28 字數 778 閱讀 9704

資源限制

時間限制:1.0s 記憶體限制:512.0mb

問題描述

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

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

輸入格式

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

輸出格式

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

樣例輸入

5 2樣例輸出

思路:漢諾塔也算乙個比較經典的例題了,可以幫助我們很好地理解遞迴呼叫,有興趣的朋友可以看看這個題。本題漢諾塔問題已經解釋了乙個盤三個柱子(目標是將a柱子中的盤放入c柱子),直接將a柱子放入c柱子即可,二的盤的話需要借助b柱子,最上面的盤放入b柱子,再將下面的盤放入c柱子,最後將b柱子的盤放入c柱子即可,而根據盤子數目的放法滿足2的n次方減1(計算公式),題中做了點小小的改變,可以不止移動乙個盤子,所以可以轉化為m等於1,而對應的n則為:如果n對m取餘不等於零則n對m的商加一,否則不用加(因為已經移動完成),再利用上述公式即可。

**如下:

#include

#include

using

namespace std;

main()

cout<<

pow(

2,i)-1

;}

藍橋杯 演算法訓練 Hanoi問題

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

試題 演算法訓練 Anagrams問題 藍橋杯

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

藍橋杯試題 演算法訓練 數列 C

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 30,31,30 31,32,30 32,31 3...