这是我写的代码 你看看吧 
   首先如果只执行A操作的话 能到的位置是2^n-1,每次都是到这个位置,然后我们判断这些点是不是 
   我们要到达的点,如果不是我们就要找到要到达的点的两端,走到最右端倒回去,倒回去的时候其实 
   和往前走是一样的,因为速度这时候也变成了1 
   int racer(int target)
 {
     int sum = 0;
     int i = 0;
     for (i; i < 1000; i++)
     {
         if ((pow(2, i)-1) == target)
             return i;
         if ((pow(2, i)-1) < target && (pow(2, i + 1)-1) > target)
             break;
     }
     sum = sum + i + 1;
     int dis = pow(2, i + 1) - 1 - target;
     sum = sum + racer(dis) + 1;
     return sum;
 }