标签:故事 存在 class cstring ret main while 汉诺塔 std
Input包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数目N(1<=N<=60)和盘
号k(1<=k<=N)。
Output对于每组数据,输出一个数,到达目标时k号盘需要的最少移动数。
Sample Input
2 60 1 3 1
Sample Output
576460752303423488 4
拿n-1個盤的時候,其實就是這最底下那個盤的移動,若我們設f(n)是第n個盤的移動次數,那麼就很容易猜想到f(n-1) = 2f(n)所以f(k) = 2f(k+1)
f(n) = 1; 所以f(k) = 2^(n-k);
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 int main(){ 7 int t,n,k; 8 scanf("%d",&t); 9 while(t--){ 10 scanf("%d%d",&n,&k); 11 cout<<(long long)pow(2.0,n-k)<<endl; 12 } 13 return 0; 14 }
标签:故事 存在 class cstring ret main while 汉诺塔 std
原文地址:http://www.cnblogs.com/shixinzei/p/7295183.html