假设有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.