当前位置: 首页 > 后端技术 > PHP

每日一题:两起凶杀案

时间:2023-03-30 03:43:30 PHP

假设有n个人站成一圈,从1到n依次排列。1号开始用剑杀死2号。然后,他将剑传给了下一个还站着的人,在本例中是3号。然后3号用剑杀死了4号,并将它传给了5号。这种模式在圆圈内和周围继续,直到只剩下一个人。最后一个人的序号是多少?示例:假设有5个人站成一圈。1号一剑杀2号,传给3号,3号一剑杀4号,传给5号,5号一剑杀5号,杀5号。1、传给3号,3号用剑杀死5号,最后获胜functioncircle_slash(int$n):int{//编码编码...}其中$n为人的数量。祝你好运!回答,我会在评论区查看,谢谢!今晚我会搬出示例代码!感谢segmentfault团队热气腾腾而不是沸腾。例子:我们来看最简单的PHPfunctioncircle_slash(int$n)例子:int{return1+2*($n-2**~~log($n,2));}临时最优算法:functioncircle_slash(int$n):int{$multiplier=2;$firstKiller=1;while($n>1){$firstKiller+=($n%2)*$multiplier;$n=地板($n/2);$乘数*=2;}return$firstKiller;}但是这两者都不是我写的,我要感谢chenx的想法。谢谢你!至于第一个例子,我是从谷歌上得到的。谢谢donaldsebleung。