竟然一次提交就AC了,我一直在考虑要怎么改.................
主要是其中的关系
#include<stdio.h>
#include<math.h>
int main()
{
__int64 m,a[64];
int i,n,x,location;
a[1]=1; a[0]=0;
for(i=2;i<64;i++)
a[i]=2*a[i-1]+1;
while(scanf("%d%I64d",&n,&m)==2 &&(m||n))
{
location=1;
while(m>1)
{
for(i=2;i<64;i++) //每次判断m的大小大概是在移动以哪个盘子为底的一系列盘子
if(m<=a[i])
break;
x=i;
if(m==a[i]) //如果恰好在第i次搬运完成,则此步移动的是 第一个盘子
{
location=1;
break;
}
if(m-a[x-1]==1) //如果将x-1个盘子移好,那么下一步该是移动第x个盘子
{
location=x;
break;
}
if(m-a[x-1]>1) //如果第x个盘子移好,但是第x+1个盘子未移好,则重复x盘未移好前的工作----移动其余盘子
m=m-a[x-1]-1;
}
printf("%d\n",location);
}
return 0;
}