一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈

一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的 进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号

<?php

//$n猴子个数 $m第几个位置

function fn( $n, $m)
{

  //将猴子数量放到数组内
  for($i = 1; $i < $n+1; $i++){
    $arr[] = $i;
  }
  $i = 0;
  var_dump($i);

  //当数组内只剩下一个值跳出数组
  while(count($arr) > 1){
    echo $i."\n";
    if(($i + 1) % $m == 0){

      //当循环次数满足m值 去除掉当前值
      unset($arr[$i]);
    }else{

      //不满足循环次数 放到数组对尾
      array_push($arr, $arr[$i]);

      //删除掉当前循环内容
      unset($arr[$i]);
    }
    $i ++;
  }
  return $arr;
}

var_dump(fn(15,7));

时间: 2024-10-14 04:25:29

一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈的相关文章

约瑟夫环-一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈

一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,如此不停 的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王.要求编程模拟此过程,输入m.n, 输出最后那个大王的编号(约瑟夫环). function fuhuan($allnum, $ti){ $arr = array(); for($i = 0; $i < $allnum; $i++){ $arr[$i] = $i; } $nums = 1; whi

一群猴子排成一圈,按1 2 3 ... n依次编号

<?php /** * 一群猴子排成一圈,按1 2 3 ... n依次编号 * 然后从第一只开始数,数到第m只把它踢出去,从它后面数,再到m只,然后踢出去.直到最后一个猴子,为大王. * 请算出大王的编号. */ function getKing($m,$n) { // 初始化数据 $arr = []; for($i = 1;$i<= $n ;$i++) { $arr[] = $i; } // 循环次数,数组模拟队列 for($j = 1;$j <= ($n-1)*$m;$j++) {

一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!

package com.pb.demo1; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来! * 约瑟夫的游戏 */ public class Demo1 { public sta

300个人围成一个圈,从某个指定的人开始报数(1--3),凡是数到3的人退出圈子

public static void main(String[] args) { /* * 300个人围成一个圈,从某个指定的人开始报数(1--3),凡是数到3的人退出圈子, * 问最后剩下的一个是从指定位置开始计数的第几个人? */ int num[]=new int[300]; int i=0; // 数组的下标计数器 0---299 int count=0; // 退出的人数计数器 0---299 int n=1; // 数数的计数器 1---3 while(count<299){ //

一群伟大的科学家死后在天堂里玩藏猫猫,轮到爱因斯坦抓人,他数到100睁开眼睛,看到所有人都藏起来了,只见伏特趴在不远处。 爱因斯坦走过去说:“伏特,我抓住你了。” 伏特说:“不,你没有抓到我。” 爱因斯坦:“你不是伏特你是谁?” 伏特:“你看我身下是什么?” 爱因斯坦低头看到在伏特身下,居然是安培! 伏特:“我身下是安培,我俩就是伏特/安培,所以你抓住的不是我,你抓住的是....” …… 欧姆!

一群伟大的科学家死后在天堂里玩藏猫猫,轮到爱因斯坦抓人,他数到100睁开眼睛,看到所有人都藏起来了,只见伏特趴在不远处.爱因斯坦走过去说:"伏特,我抓住你了."伏特说:"不,你没有抓到我."爱因斯坦:"你不是伏特你是谁?"伏特:"你看我身下是什么?"爱因斯坦低头看到在伏特身下,居然是安培!伏特:"我身下是安培,我俩就是伏特/安培,所以你抓住的不是我,你抓住的是...."--欧姆! 爱因斯坦反应迅速,于是改口

Java简单算法--出圈问题

package cn.magicdu.algorithm; import java.util.LinkedList; import java.util.List; /** * 出圈问题,数到某个数字的倍数就出圈,打印最后剩下的元素的原来位置 * * @author xiaoduc * */ public class Circle { public static void main(String[] args) { System.out.println("剩下元素原来的位置"+cycle

约瑟夫环问题(100围坐一圈报数,报3出圈)

100个人编号1-100,围坐一圈,从1号开始进行1,2,3报数,谁报数为3,就离开圈子,剩下的人继续报1,2,3,报数为3的出圈... 请写一段程序,计算最后一个留下来的人,他的编号 1 package com.ycl.test; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Test1 { 7 public static void main(String[] args) { 8 int co

出圈问题

题目:50个人围城一圈数到3和3的倍数时出圈,问剩下的人是谁?原来的位置是多少? 重复循环使用取余的方法: 1 import java.util.LinkedList; 2 import java.util.List; 3 4 5 public class Main { 6 public static void main(String[] args) { 7 System.out.println("该数字原来的位置是:" + cycle(50, 3)); 8 } 9 10 public

5、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 思路:n长度的数组,boolean类型。出圈置为false,当最后只有一个true的时候,就是留下来的人。

public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入人的个数n:"); int n = sc.nextInt(); fun(n); sc.close(); } private static void fun(int n) { boolean[] ps = new boolean[n]; int co