假设有n个人站成一个圆圈,按顺序排列1到n。
1号开始用剑杀死2号。然后他把剑传给仍站着的下一个人,在这种情况下,3号。3号然后用剑杀4号,并将其传给5号。这种模式继续在圈内和周围,直到只有一个人保持。
最后一个人的序号是多少?
例子:
假设有5个人站成一圈
1号拿剑杀死2号,传递给3号,
3号拿剑杀死4号,传递给5号,
5号拿剑杀死1号,传递给3号,
3号拿剑杀死5号,最终获胜
function circle_slash(int $n): int {
// Coding and coding ...
}
其中,$n为人数.
祝君好运!
答案,我会在评论区中查看,谢谢!晚上我会搬出示例代码!谢谢 segmentfault团队 清蒸不是水煮 提供的意见
例子:
让我们来看看PHP的最简单的例子
function circle_slash(int $n): int {
return 1 + 2 * ($n - 2 ** ~~log($n, 2));
}
暂时算法最优的:
function circle_slash(int $n): int {
$multiplier = 2;
$firstKiller = 1;
while ($n > 1) {
$firstKiller += ($n % 2) * $multiplier;
$n = floor($n / 2);
$multiplier *= 2;
}
return $firstKiller;
}
不过这两个都不是我写的,我得感谢chenx提供的想法.谢谢!
至于第一个例子,我是在google而得到.感谢 donaldsebleung.