逐日一题: 二 杀人事宜

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

    原文作者:adolph
    原文地址: https://segmentfault.com/a/1190000010087799
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞