`

猴子数数问题

    博客分类:
  • PHP
PHP 
阅读更多

n个猴子坐一圈轮流1、2、3报数,每报到3的猴子则出列。最后剩下的那只为猴王。请用php编写一个函数,输入为猴子的个数和报数的起始位置,返回值为猴王的序号

 

<?php

function fun($n,$begin)
{
//输入判断
if(!is_int($n) || $n<=0)return false;
if(!is_int($begin) || $begin>$n || $begin<=0)return false;

//初始化数组,使其内部指针指向传进函数的“开始位置”
$arr = array();
for($i=1;$i<=$n;$i++)$arr[] = $i;
for($i=1;$i<$begin;$i++,next($arr));

while(count($arr)>1) //当数组大小不为1时循环报数
{
//报数,往后数两位
for($i=0;$i<2;$i++)
{
if(!next($arr))reset($arr);
}
//获得报数3位置的键、值(此处内部指针会前进一步)
$key = each($arr);

if(!current($arr)) //如果报数到3的位置是数组末端,及通过each后,指针超出了数组的范围
{
reset($arr); //将内部指针重置到数组首部
array_pop($arr); //删除数组末端的键、值
}
else
{
prev($arr); //否则指针回退一格
unset($arr[$key['key']]); //删除报数为3的键、值 
}
}
if(!current($arr))reset($arr); //循环过后,因为each操作,内部指针有可能超越了数组末端,需要重置
return current($arr);
}

echo fun(5,3);
?>

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    C语言经典例子--数猴子

    首先,我们要明确问题背景:有n个猴子,编号从0到n-1,每一轮从第1个猴子开始数数,数到m的猴子会被淘汰(或称为“被选中”)。这个过程持续进行,直到所有猴子都被选中。这个问题的核心在于如何用程序来模拟这一...

    猴子报数 计算器 VC++

    猴子报数,也被称为约瑟夫环问题,是计算机科学中的一个经典算法问题。这个问题源自一个古老的犹太传说,涉及到一系列猴子围绕一个圆圈报数,每当数到特定数字的猴子就会被移出圈子,直到只剩下最后一只猴子为止。在...

    猴子选大王问题

    在该问题中,有`n`只猴子围成一圈,从某只猴子开始报数(假设从1开始),每数到`m`时,就有一只猴子被淘汰出局,然后从下一只猴子重新开始报数,直到最后只剩下一只猴子,即为“大王”。 #### 二、C语言实现解析 此...

    猴子选大王问题 的习题解

    这个问题源自于一个有趣的寓言故事:一群猴子围成一圈,从某个猴子开始计数,数到特定数值的猴子被淘汰,然后剩下的猴子继续这个过程,直到只剩下最后一只猴子,这只猴子就被选为“大王”。在编程实现中,这个特定...

    猴子选大王问题(约瑟夫问题).docx

    这个问题描述如下:一群编号从1到m的猴子围成一圈,从第1号开始数数,每数到第n号的猴子就离开圈子,然后从下一只继续数,直到圈中只剩下一个猴子,这个猴子即为大王。本篇将探讨如何使用C++语言,通过数组和链表两...

    所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号

    在这个问题中,猴子们按照一定的规则淘汰,最终剩下的一个被选为大王。题目中给出了四种不同的解决方案,分别使用了循环链表、数组以及普通的for循环来实现。 首先,我们来理解这个问题的本质。它是一个基于循环...

    C++猴子选大王问题也即约瑟夫环问题

    问题的目标就是找到在特定报数规则下,哪只猴子最终会被选为大王。 #### 三、代码分析 本题的C++代码实现中,使用了一个数组`p[20]`来表示猴子的状态。数组中的每个元素代表一只猴子,初始值为1表示猴子还在圈内,...

    猴子吃桃问题

    对于猴子吃桃问题,我们可以定义一个函数,输入参数为当前剩余桃子数,如果桃子数为1则返回1,表示找到了初始桃子数;否则,返回2倍于第二天桃子数减1的结果。这个函数会不断地调用自身,直到满足结束条件为止。 在...

    对于问题猴子的处理.pdf

    从现有的信息来看,文档标题是“对于问题猴子的处理.pdf”,然而内容部分却是无意义的字符组合和数字序列,这些内容对于正常阅读和理解文档所要传达的知识点是无帮助的。 尽管如此,我会基于标题“对于问题猴子的...

    c语言经典编程例如猴子吃桃问题

    本资源摘要信息涵盖了五个经典的C语言编程题目,包括猴子吃桃问题、回文数问题、杨辉三角问题、加密问题和平方数问题。每个题目都包含问题描述、程序分析和源代码实现。 一、猴子吃桃问题 猴子吃桃问题是一个经典...

    JAVA编写猴子分食问题

    这个问题是通过递归的思想来模拟猴子分桃的过程,用Java代码实现了寻找满足条件的最小桃子数的算法。通过循环和条件判断,我们能找到一个桃子数,使得每只猴子都能按照规则进行分食,并且在最后一只猴子分完后,桃子...

    BogoCountGame:BogoCount , 猴子数数

    BogoCount,猴子数数,猴子数数游戏. 编程语言: java 测试环境: 小米3(5寸屏,1080*1920) #进度表 20150407 新建猴子数数项目 20150408 完成,加上动画,新的UI #问题 1.CardView 未实现 2.子控件不重叠 已实现,需要优化 ...

    猴子吃桃子问题_猴子吃桃子问题_

    猴子吃桃子问题是一个经典的逆向思维问题,它涉及到数学计算和编程算法的运用。问题描述了一群猴子在连续的10天内吃桃子的过程,每天吃掉现有桃子的一半后再加一个,到第10天时只剩下一个桃子。我们的目标是通过这个...

    猴子选大王(c++)

    这个问题源自一个寓言故事:一群猴子围成一圈,从第一只开始数数,数到指定数值的猴子被淘汰出局,然后从下一只继续数,直到只剩下一个猴子,这个猴子就被选为大王。程序的主要目的是根据猴子的数量和淘汰的条件找出...

    涉及多种算法的C++猴子吃桃问题

    在编程领域,猴子吃桃问题是一个经典的动态规划问题,它源于中国的民间故事,常用于考察程序员的逻辑思维和算法设计能力。在这个问题中,一只猴子每天会吃掉一定数量的桃子,并且会留下一部分桃子供第二天食用。具体...

    ACM 猴子报数

    n个猴子围坐一圈并按照顺时针方向从1到n编号,从第s个猴子开始进行1到m的报数,报数到第m的猴子退出报数,从紧挨它的下一个猴子重新开始1到m的报数,如此进行下去知道所有的猴子都退出为止。求给出这n个猴子的退出的...

    约瑟夫问题(猴子选大王)数学解法

    约瑟夫问题,又称“约瑟夫环”或“猴子选大王”,是一个著名的理论问题,源自古希腊的数学家约瑟夫·弗拉基米尔。这个问题的基本设定是:有一群人围成一个圈,从某个人开始按顺时针方向编号,然后从第一个人开始报数...

    猴子选大王

    任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求: 输入...

Global site tag (gtag.js) - Google Analytics