漢諾塔
題目
用1,2,...,n表示n個盤子,稱為1號盤,2號盤,...。號數**子就大。經典的漢諾塔問
題經常作為乙個遞迴的經典例題存在。可能有人並不知道漢諾塔問題的典故。漢諾塔**於
印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從下往上按大小
順序摞著64片**圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱
子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一回只能移動乙個圓盤。我們
知道最少需要移動2^64-1次.在移動過程中發現,有的圓盤移動次數多,有的少 。 告之盤
子總數和盤號,計算該盤子的移動次數.
input
包含多組資料,首先輸入t,表示有t組資料.每個資料一行,是盤子的數目n(1<=n<=60)和盤
號k(1<=k<=n)。
output
對於每組資料,輸出乙個數,到達目標時k號盤需要的最少移動數。
sample input
260 1
3 1sample output
576460752303423488
4正確**
typedef long long ll;
using namespace std;
int main()
;int i;
int t;
int n,k;
for(a[0]=i=1;i<=64;i++)
scanf("%d",&t);
while(t--)
return 0;
****理解**
漢諾塔的問題是數學問題,通常漢諾塔問題都可以直接用數學公式進行執行和計算,該題的題意時要求求出編號k的碟子移動幾次,由數學規律可以了解到,漢諾塔的每乙個碟子的運動次數隨著k值的增大而增大,切一次增多2倍,即a[i]=a[i-1]*2,由此可以求出64個盤子每個盤子的移動次數。
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔c 實現
用c 實現了漢諾塔,使用了遞迴,使用了上一次實現的堆疊這個資料結構來實現的漢諾塔,下面是 stack.h main.cpp stackdemo created by xin wang on 4 15 15.include class outofbounds 刪除定義的陣列 bool isempty ...
C 遞迴,漢諾塔
a為存放盤子的塔,b為目標塔,c為輔助塔 演算法分為三步 一 將a上n 1個盤子全部放到c塔上 二 將a上剩下的乙個盤子放到b塔上 三 將c塔上的盤子全部放到b塔上 注 不需要考慮如何移動n 1個盤子 遞迴過程 首先,將a上n 1個盤子放到c上,然後將a上剩下的乙個盤子放到b上,然後可以看成a為輔助...