美文网首页
PHP单向链表解决得瑟约夫问题

PHP单向链表解决得瑟约夫问题

作者: 胡乱唱歌ing | 来源:发表于2019-11-12 14:57 被阅读0次

概述:约瑟夫问题是个有名的问题,N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉

$arr = [1,2,3,4,5,6,7,8,9,10];//假如有10个人
$n = 3;//数到第三个kill掉一个人

function sigleLink($arr,$n)
{
    $count = count($arr);//获取总人数
    $k = $n;//记录步数
    while ($count > 1) { //如过只剩一个人就跳出循环
        
        foreach ($arr as $key => $val) {
          // 因为数组下标是从0开始,所以要$n-1
            if($key == ($n-1))
            {
                $temp = $arr[$key];
                unset($arr[$key]);
                echo $temp."出局: ".implode(',',$arr)." \n";
                $n += $k; //继续往下数$k个
                continue;
            }else
            {
                array_push($arr,$arr[$key]);//把前面的元素追加数组末尾,形成单链表
                unset($arr[$key]);
            }
        }
        $count = count($arr);//更新人数
    }
    print_r($arr);//打印最后剩下的
}
sigleLink($arr,$n);

相关文章

  • PHP单向链表解决得瑟约夫问题

    概述:约瑟夫问题是个有名的问题,N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉

  • 算法面经---单向循环链表(解决约瑟夫问题)

    单向循环链表--解决约瑟夫问题 一、单向循环链表的应用场景 1.1 问题描述 Josephu(约瑟夫、约瑟夫环) ...

  • 单向链表解决约瑟夫问题

    1.什么是约瑟夫问题? 2.约瑟夫问题的解决方式通过单向循环链表解决,具体思路如下: 3.单向循环链表的使用场景 ...

  • 数据结构与算法之循环链表(3.4)

    目录 单向循环链表双向循环链表约瑟夫问题如何发挥循环链表的最大威力? 一 单向循环链表 单向循环链表 - 只有一个...

  • php单向链表

    题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每...

  • iOS 面试之道 阅读笔记(2)

    更多数据结构 链表 单向链表节点: 双向的话就多加一个prev。 解决链表问题是常用的技巧: dummy head...

  • 单向环形列表和约瑟夫问题

    可以用单向环形列表来解决约瑟问题 算法: 1.先创建第一个节点,让first指向该节点,将first.next指向...

  • 8.单向链表SingleLinkList

    目录:1.单向链表的定义2.单向链表的图解3.单向链表定义操作4.单向链表的实现 1.单向链表的定义 2.单向链表...

  • 44_递归的思想与应用(中)

    关键词:单链表的转置、单向排序链表的合并、汉诺塔问题、全排列问题 0. 单链表的转置 1. 单向排序链表的合并 2...

  • 线性表-单向循环链表

    为了方便,本文介绍的单向循环链表不包含头节点 单向循环链表内容 单向循环链表的的定义 单向循环链表的创建 单向循环...

网友评论

      本文标题:PHP单向链表解决得瑟约夫问题

      本文链接:https://www.haomeiwen.com/subject/gpqqictx.html