地址:http://acm.hdu.edu.cn/showproblem.php?pid=2175
题意:中文。
mark:递归算一下就可以了。n个盘子前2^(n-1)-1次是移动n-1个盘子的操作,第2^(n-1)是移动最大那个盘子,后面又是n-1个盘子的操作。
代码:
# include <stdio.h>
long long dfs(long long n, long long m)
{
long long mid = (1LL<<(n-1)) ;
if (m == mid) return n ;
if (m < mid) return dfs(n-1,m) ;
return dfs(n-1,m-mid) ;
}
int main ()
{
long long n, m ;
while (~scanf ("%I64d%I64d", &n, &m), (n||m))
printf ("%I64d\n", dfs(n, m)) ;
return 0 ;
}