猴子摘桃的算法
有一只猴子摘了一堆桃子,当即吃了一半,可是桃子太好吃了,它又多吃了一个,第二天它把第一天剩下的桃子吃了一半,又多吃了一个,就这样到第十天早上它只剩下一个桃子了,问它一共摘了多少个桃子?
$a=1;
for($i=10;$i>1;$i--){
$a=($a+1)*2;
}
return $a;
实现猴子选大王问题算法实例
n只猴子围坐成一个圈,按顺时针方向从1到n编号。
然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,
如此重复,直至剩下一个猴子,它就是大王。
设计并编写程序,实现如下功能:
(1) 要求由用户输入开始时的猴子数
n
、
报
数
的
最
后
一
个
数
n、报数的最后一个数
n、报数的最后一个数m。
(2) 给出当选猴王的初始编号。
function Monkey($n,$m) {
$r=0;
for($i=2; $i<=$n; $i++) {
$r=($r+$m)%$i;
}
return $r+1;
}
print_r(Monkey(3,3));
冒泡排序,C里基础算法,从小到大对一组数排序。
$arr = array(1,3,5,32,756,2,6);
$len = count($arr);
for ($i=0;$i<$len-1;$i++){
for ($j=$i+1;$j<$len;$j++){
if($arr[$i]>$arr[$j]){//从小到大 反之从大到小
$p = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j]= $p;
}
}
}
var_dump($arr);
杨辉三角
每一行的第一位和最后一位是1,没有变化,中间是前排一位与左边一排的和,这种算法是用一个二维数组保存,另外有种算法用一维数组也可以实现,一行 一行的输出
$n = 7;
//每行的第一个和最后一个都为1,写了n行
for($i=0; $i<$n; $i++) {
$a[$i][0]=1;
$a[$i][$i]=1;
}
//出除了第一位和最后一位的值,保存在数组中
for($i=2; $i<$n; $i++) {
for($j=1; $j<$i; $j++) {
$a[$i][$j] = $a[$i-1][$j-1]+$a[$i-1][$j];
}
}
//打印
for($i=0; $i<$n; $i++){
for($j=0; $j<=$i; $j++) {
echo $a[$i][$j].' ';
}
echo '<br/>';
}
在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。
思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位。
$in = 69;
$arr = array(1,1,1,3,5,7);
$n = count($arr);
$is= false; //是否比较
$clone = $arr;
for ($i=0; $i<$n; $i++){
$temp = $clone[$i];
if ($arr[$i] >= $in && $is == false) {
$arr[$i] = $in;
$is =true;
}
if ($is){
$arr[$i+1]=$temp;
}
if ($arr[$i]<$in && $i ==$n-1){
$arr[$i+1]=$in;
}
}
var_dump($arr);
牛年求牛:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛。
function t($n)
{
static $num = 1;
for ($j = 1; $j <= $n; $j++) {
if ($j >= 4 && $j < 15) {
$num++;
t($n-$j);
}
if ($j == 20) {
$num--;
}
}
return $num;
}
echo t(20);