PHP约瑟夫问题,丢手帕问题
来源:互联网 发布:照度计软件 编辑:程序博客网 时间:2024/05/04 19:40
无意间看到了这个丢手帕问题,于是乎自己动手写了写这个的解决方法。
//test//$arr 数组//$limit要数的个数//$j从第几个开始数//$n数组总数//$rank循环取了的次数function get_last($arr,$limit,$j,$n,$rank=0){ //得到最后值 if(count($arr)<2){ sort($arr); echo "最终的值是".$arr[0]; } $k = $rank; //echo "开始".$j; for($i=($j-1);$i<$n;$i++){ if(isset($arr[$i])){ $k++; }else{ continue; } //取出的数值 if($k == $limit){ echo '取出的是'.$arr[$i]."<br/><br/>"; unset($arr[$i]); $start = $i+2; if($start >= $n){ $start = 1; } get_last($arr,$limit,$start,$n,0); break; } //判断后续是否还有元素 $count = 0; for($a = $i+1;$a<$n;$a++){ if(isset($arr[$a])){ $count++; } } //判断没有后续元素时,没有了则从头开始统计 if( $count<1 ){ get_last($arr,$limit,1,$n,$k); } }}
其实挺简单的一个问题,主要需要注意一些细节,当循环到后面没有数值或者不足要数的个数时。
$arr = array(1,2,3,4,5,6,7,8,9,10);get_last($arr,4,1,10,0);
最终输出数值5。另外网上找了一个对比了一下,感觉自己写的多了个循环,思路简单,找的是总结了数据的规律进行计算了一下
function doJosephus($arr, $k, $m) { //静态变量(存在数据不能计时清除的危险) static $storage = array(); $temp = array(); $cnt = count($arr); //判断数组是否有元素,否则退出执行 if ($cnt) { $k_mod = ($cnt - $k + 1) % $m - $m; //为下一次调用时设置的开始位置 static $start = 1; //初始化开始位置为1 for ($i = 0; $i < $cnt; $i++) { if ($i >= $k - 1) {//从大于等于$k位置(计为1),开始处理 if (!($start % $m)) { //等于$m长度则入库 $storage[] = array_shift($arr); } else { //不属于$m长度的则计入下一个处理的数组 $temp[] = array_shift($arr); } //指针在一个环内不断的往前走(加1) $start++; } else { //在$k位置之前的元素全部进入下一次循环 $temp[] = array_shift($arr); } } //递归调用开始(模拟链接环的作用) doJosephus($temp, $k_mod, $m); } return $storage;}
0 0
- PHP约瑟夫问题,丢手帕问题
- 丢手帕问题(约瑟夫问题)
- 丢手帕问题-约瑟夫问题
- 用PHP实现丢手帕问题(约瑟夫问题)
- 丢手帕问题(约瑟夫问题)
- 约瑟夫问题(也叫丢手帕问题)
- JAVA约瑟夫问题(丢手帕问题)
- 丢手帕问题(约瑟夫问题)
- 丢手帕问题 (约瑟夫问题)
- 约瑟夫问题(丢手帕)的实现
- JAVA 实现 丢手帕(约瑟夫)问题
- 丢手帕问题 (约瑟夫问题)Java实现
- 丢手帕问题,约瑟夫问题(集合实现)
- 约瑟夫问题(丢手帕问题)的数组实现
- 循环单链表的实现,解决约瑟夫丢手帕问题
- Java约瑟夫问题(丢手帕)的双向循环实现
- 丢手绢java代码即约瑟夫问题
- 丢手帕问题
- 学习linux
- cocos2dx 源码学习7 CCNS.h
- 内存管理1
- 第十二周项目三(1)
- VMplayer创建虚拟机
- PHP约瑟夫问题,丢手帕问题
- 第十二周项目二OJ平台(2)
- 应用程序中的服务器错误,没有名称为“ServiceBehavior”的服务行为
- 第十二周 项目四:银行系统 任务三 将程序用多文件组织
- 第十二周项目 输入一个整数n,要求用递归函数实现对应的二进制形式。
- MySQL: Root element is missing
- 第十二周项目二(1) 求N组数最大公约数
- 数据库技术_Orcale常见问题(0001)_完美解决sql中带有空格无法执行
- 在Macbook上连接VPN