※ 引述《neiltsang (楚留香鸡排)》之铭言:
: 那么也不算难啊 其实过程的概念写下来就好了 只能说冗长吧
: 或就利用归纳法囉 另一个答案:
: 写成二进制然后把第一位移到最后面 这解我就真的不会
这个问题要直接出手解决那当然是比较难
假设n个人的时候,f(n)会活下来
但可以先从简单的例子看起,比如 n 偶数的时候,
考虑 n = 10:
1,2,3,4,5,6,7,8,9,10
奇数会先把偶数杀光变成
1,3,5,7,9 然后又从1开始,
所以从这边可以看得出 f(n) = 2f(n/2)-1 if n is even
那n是奇数呢?
考虑 n = 9
1,2,3,4,5,6,7,8,9
一样奇数会把偶数杀光,变成
1,3,5,7,9
但注意的是最后那个奇数还没有动作,所以下一轮会变成9开始干活,
等于是在问 9,1,3,5,7 这列如果开杀谁会活下来
所以可以得到 f(n) = 2[ f( (n+1)/2)-2 mod (n+1)/2 ] +1 if n is odd
整理起来我们就有
f(1) = 1;
for n>=2 we have
f(n) = 2f(n/2)-1 if n is even
2[ f( (n+1)/2)-2 mod (n+1)/2 ] +1 if n is odd
从而我们就可以进而用数学归纳法证明:
给定任何 2^n + k where n>=0 and 0<= k <= 2^n-1
我们都有 f(2^n+k) = 2k+1