PHP经典算法(三)
2019-12-18 09:16:47 来源:admin 点击:772
11.有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?例如:总共3级台阶,可以先迈1级再迈2级,或者先迈2级再迈1级,或者迈3次1级总共3中方式
function jieti($num){ //实际上是斐波那契数列
return $num<2?1:jieti($num-1)+jieti($num-2);
}
折叠通项公式
12.请写一段PHP代码,确保多个进程同时写入同一个文件成功
<?php
$fp = fopen("lock.txt","w+");
if (flock($fp,LOCK_EX)) {
//获得写锁,写数据
fwrite($fp, "write something");
// 解除锁定
flock($fp, LOCK_UN);
} else {
echo "file is locking...";
}
fclose($fp);
?>
13.无限级分类
function tree($arr,$pid=0,$level=0){
static $list = array();
foreach ($arr as $v) {
//如果是顶级分类,则将其存到$list中,并以此节点为根节点,遍历其子节点
if ($v['pid'] == $pid) {
$v['level'] = $level;
$list[] = $v;
tree($arr,$v['id'],$level+1);
}
}
return $list;
}
14.获取上个月第一天 和 最后一天
//获取上个月第一天
date('Y-m-01',strtotime('-1 month'));
//获取上个月最后一天
date('Y-m-t',strtotime('-1 month'));
15.随机输入一个数字能查询到对应的数据区间
//把区间换成数组写法,用二分法查找区间
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;
}
}
return '在区间'.$a[$high].'到'.$a[$lower];
}
$array = ['1','50','100','150','200','250','300'];
$a = '120';
echo binsearch($a,$array);