题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1995
这道题要求的是在到达目标时K号盘子需要移动的次数,那么你应该要明白的是K号盘子的移动次数只和下面的盘子有关,
跟上面的盘子都无关,所以这道题就转化成了剩下的n-k+1(k号盘下面的盘子数包括k号盘)号盘子需要移动的次数 然后因为如果是第n号盘子的话 那他的移动次数肯定是1
所以我们只需考虑把n-1个盘子移到目标处的移动次数 可以得出a[i]=a[i-1]*2,所以所求的移动次数X=a[n-k+1]这就是n-k+1个盘子所需的移动次数
#include <stdio.h>
int main()
{
int t,n,k,i;
__int64 a[61];
scanf("%d",&t);
a[1]=1;
for(i=2;i<=60;i++)
{
a[i]=a[i-1]*2;
}
while(t--)
{
scanf("%d%d",&n,&k);
printf("%I64d\n",a[n-k+1]);
}
return 0;
}