php经典趣味算法
21-04-07 03:49
550
0
1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
function king($n, $m){ $monkeys = range(1, $n);//创建1到n数组 $i=0; while (count($monkeys)>1) {//循环条件为猴子数量大于1 if(($i+1)%$m==0) {//$i为数组下标;$i+1为猴子标号 unset($monkeys[$i]);//余数等于0表示正好第m个,删除,用unset删除保持下标关系 } else { array_push($monkeys,$monkeys[$i]);//如果余数不等于0,则把数组下标为$i的放最后,形成一个圆形结构 unset($monkeys[$i]); } $i++;//$i 循环+1,不断把猴子删除,或 push到数组 } return current($monkeys);//猴子数量等于1时输出猴子标号,得出猴王 } echo king(6,3);
2、有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛。
function niu($y){ static $num= 1;//定义静态变量;初始化牛的数量为1 for ($i=1; $i <=$y ; $i++) { if($i>=4 && $i<15){//每年递增来算,4岁开始+1,15岁不能生育 $num++; niu($y-$i);//递归方法计算小牛$num,小牛生长年数为$y-$i }else if($i==20){ $num--;//20岁死亡减一 } return $num; } }
3、杨辉三角
/* 默认输出十行,用T(值)的形式可改变输出行数 */
class T{ private $num; public function __construct($var=10) { if ($var<3) die("值太小啦!"); $this->num=$var; } public function display(){ $n=$this->num; $arr=array(); //$arr=array_fill(0,$n+1,array_fill(0,$n+1,0)); $arr[1]=array_fill(0,3,0); $arr[1][1]=1; echo str_pad(" ",$n*12," "); printf("%3d",$arr[1][1]); echo ""; for($i=2;$i<=$n;$i++){ $arr[$i]=array_fill(0,($i+2),0); for($j=1;$j<=$i;$j++){ if($j==1) echo str_pad(" ",($n+1-$i)*12," "); printf("%3d",$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j]); echo " "; } echo""; } } } $yh=new T('3'); //$yh=new T(数量); $yh->display();
4.冒泡排序
function maopao($arr){ $len = count($arr); for($k=0;$k<=$len;$k++) { for($j=$len-1;$j>$k;$j--){ if($arr[$j]<$arr[$j-1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $temp; } } } return $arr; }
5.快速排序
function quickSort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //选择第一个元素作为基准 $base_num = $arr[0]; //遍历除了标尺外的所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于基准的 $right_array = array(); //大于基准的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边 $right_array[] = $arr[$i]; } } //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数 $left_array = quickSort($left_array); $right_array = quickSort($right_array); //合并 return array_merge($left_array, array($base_num), $right_array); }
6.二分查找算法(折半查找算法)
$arr = array(4,58,11,34,88,45,32,54,63,78); function binary($arr,$bnum) { if(is_array($arr) && count($arr) > 0){ sort($arr); $start = 0; $end = count($arr)-1; $mid = -1; while($start <= $end){ $mid = floor( ($start+$end)/2 ); if($arr[$mid] == $bnum){ return $arr[$mid]; }else if($arr[$mid] < $bnum){ $start = $mid +1; }else if($arr[$mid] > $bnum){ $end = $mid - 1; } } return -1; } } $mm = binary($arr,32); print_r($mm);//输出32
-
新东方在线考研英语课堂笔记
01.复习_可不用下载【英一】图画作文开头段.pdf01.带练讲义【英一】图画作文开头段.docx01.带练讲义【英一】图画作文开头段.pdf01.英一真题... 1007 0 24-08-20 -
TVBOX助手-win-1.0.9免装版
由于电视观影的TVbox是一个不折不扣的空壳,所以一般都是需要自定义来使用的,而一些接口就很不稳定,经常性失效,其实不管啥原因,这个神... 1529 0 25-02-15 -
考研数学历年真题及解析 - 数二
1987年数二真题答案速查.pdf1987考研数学二真题.pdf1988年数二真题答案速查.pdf1988考研数学二真题.pdf1989年数二真题答案速查.pdf1989考研... 959 0 24-08-19 -
倒数日 - 日历应用程序日期提醒工具
倒数日一款日历应用程序,可以计算你生命中剩下的时间。它也可以用作常规日历应用程序,软件中有一些非常有用的工具,使用这些工具可以帮助... 1085 0 25-05-15 -
国家教师资格考试通关秘籍
中学学段主观题必背60题.pdf中学易错题集+答案52页.pdf中学通关密籍.pdf保教知识与能力·活动设计·作答方法与技巧.pdf保教知识与能力(幼... 1082 0 24-08-19 -
纪妖(原名知妖)古今中外妖怪百科全书
纪妖-古今中外妖怪百科全书,堪称妖界的花名册,开启摸鱼新姿势,网站上说的是中国古今妖怪收集录,但是我看了下也有国外的。这个网站收集... 2501 0 24-07-10 -
内存检查:多种类型的内存泄漏分析方案
内存泄漏内存泄漏(Memory Leak)是指程序中已动态分配的堆内存,由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速... 1245 0 24-05-24 -
jquery 3D各种图片切换方式
430 0 21-05-17
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~