猴子摘桃的算法
有一隻猴子摘了一堆桃子,當即吃了一半,可是桃子太好吃了,它又多吃了一個,第二天它把第一天剩下的桃子吃了一半,又多吃了一個,就這樣到第十天早上它只剩下一個桃子了,問它一共摘了多少個桃子?
$a=1;
for($i=10;$i>1;$i--){
$a=($a+1)*2;
}
return $a;
實現猴子選大王問題算法實例
n只猴子圍坐成一個圈,按順時針方向從1到n編號。
然後從1號猴子開始沿順時針方向從1開始報數,報到m的猴子出局,再從剛出局猴子的下一個位置重新開始報數,
如此重複,直至剩下一個猴子,它就是大王。
設計並編寫程序,實現如下功能:
(1) 要求由用戶輸入開始時的猴子數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);