int lastRemaining(int n) {
//若n为奇数,start = n-1,偶数则为n
if (n==1) return 1;
int start = (n % 2 == 0) ? n : n - 1;
int len = floor(n / 2);
int ratio = -1;
int i = 1;
while (len > 1)
{
//若len为偶数,下一步start=start+/-(len - 1)*2^i
if (len % 2 == 0)
{
start = start + (ratio * (len - 1) * int(pow(2, i)));
}
//否则下一步start=start+/-(len - 2)*2^i
else
{
start = start + (ratio * (len - 2) * int(pow(2, i)));
}
len = floor(len / 2);
ratio = -ratio;
i++;
}
return start;
}
没啥可说的,硬找规律就行了。。。。
不过有一个一行代码解决问题的是真的牛逼,先挖个坑,之后研究一下