Thoro

导航

ID 2064 汉诺塔IX

Problem Description
1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在第1根柱子上的盘子是a[1],a[2],...,a[n]. a[1]=n,a[2]=n-1,...,a[n]=1.即a[1]是最下面的盘子.把n个盘子移动到第3根柱子.每次只能移动1个盘子,且大盘不能放在小盘上. 问第m次移动的是那一个盘子.

Input

每行2个整数n (1 ≤ n ≤ 63) ,m≤ 2^n-1.n=m=0退出

Output

输出第m次移动的盘子的号数.

Sample Input

63 1
63 2
0 0

Sample Output

1
2
 1 int main()
 2 {
 3     __int64 a[65];
 4     a[1]=1;
 5     __int64 i,n,r;
 6     __int64 m;
 7     for(i=2;i<=63;i++)
 8         a[i]=2*a[i-1];
 9     while(~scanf("%I64d%I64d",&n,&m),n+m)
10     {
11         for(i=1;i<=n;i++)
12         {
13             r=m/a[i];
14             if(r%2==1&&m%a[i]==0)
15                 printf("%I64d\n",i);
16         }
17     }
18     return 0;
19 }

 

posted on 2019-07-31 20:22  Thoro  阅读(108)  评论(0编辑  收藏  举报