1. 程式人生 > >周賽第二題(ps:那時候沒做出來)

周賽第二題(ps:那時候沒做出來)

用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
2
60 1
3 1

Sample Output
576460752303423488
4

題解:找出關係…最重要的= =…記得數值的範圍確定型別…原來我跟答案之間只差了一個long long…

我的程式碼:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int t;
	while (cin >> t)
	{
		long long  m; int n, k;
		for (int i = 1; i <= t; i++)
		{
			cin >> n >> k;
			m = pow(2, n - k) ;
			cout << m << endl;
		}
	}
	return 0;
}