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、杨辉三角
<?php
/* 默认输出十行 , 用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 "<br/>";
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"<br/>";
}
}
}
$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.二分查找算法(折半查找算法)
function binsearch($x,$a){
$c=count($a);
$lower=0;
$high=$c-1;
while($lower<=$high){
$middle=intval(($lower+$high)/2);
if($a[$middle]>$x){
$high=$middle-1;
} elseif($a[$middle]<$x){
$lower=$middle+1;
} else{
return $middle;
}
}
return false;
}
7.PHP奇异算法
<?php
function test(){
推荐阅读
- 全是经典之作,总有一首让你热血澎湃 歌颂祖国的诗词
- 世界三十种经典鸡尾酒 世界排名前十的鸡尾酒
- 摘录宗旦关于茶道的经典格言
- 茶文化的趣味 规矩和氛围
- 推荐十部韩剧迷不可错过的经典好剧,剧荒的看过来吧
- 茶字妙趣
- 张爱玲与胡兰成婚书的内容 胡兰成张爱玲爱情经典语录
- 浅谈Javaweb经典三层架构和MVC框架模式
- 太极拳拳谱太极拳经典理论
- 茶个妙趣横生的字