C 初學記錄(初識漢諾塔)

2022-06-02 21:39:12 字數 1095 閱讀 7495

漢諾塔

題目

用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為輔助...