zoukankan      html  css  js  c++  java
  • 算法,约瑟夫问题

    <?php
    /**
     * 跟猴子问题比较相似,最后一个是大王。约瑟夫是最后两个是存活。
     * 约瑟夫问题是个有名的问题:
     * N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。
     * 例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
     */
    
     function getLastTwo() {
         $people = 41;
         $killNum = 3;
    
         // 初始化数据
         $people_arr = range(1,$people);
    
         for ($i = 1 ; $i <= $killNum * ($people -2);$i++) {
            $speak_num = array_shift($people_arr);
            if ($i % $killNum == 0) {
                echo "死了".$speak_num."<br/>";
            } else {
                // 放到后面
                array_push($people_arr,$speak_num);
            }
         }
    
         // 输出活着的人
         foreach($people_arr as $alive) {
             echo "我".$alive."还活着!<br/>";
         }
     }
    
     getLastTwo();
    

    结果:

    死了3
    死了6
    死了9
    死了12
    死了15
    死了18
    死了21
    死了24
    死了27
    死了30
    死了33
    死了36
    死了39
    死了1
    死了5
    死了10
    死了14
    死了19
    死了23
    死了28
    死了32
    死了37
    死了41
    死了7
    死了13
    死了20
    死了26
    死了34
    死了40
    死了8
    死了17
    死了29
    死了38
    死了11
    死了25
    死了2
    死了22
    死了4
    死了35
    我16还活着!
    我31还活着!
    
  • 相关阅读:
    C#函数复习
    ADO数据库访问类查询、属性扩展
    ADO.NET完整的删除与修改, 实体类和数据访问类
    ADO.NET增删改查
    类库、委托
    多态
    面向对象:封装、继承
    面向对象思想:对象和类
    sql 存储过程、事务、视图、触发器
    连接查询,结构、循环语句
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/12190091.html
Copyright © 2011-2022 走看看