-->

PHP资讯

您的当前位置:首页 > 资讯 > PHP基础

PHP经典算法(三)

2019-12-18 09:16:47  来源:admin 点击:534

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);
}

折叠通项公式

斐波那契数列斐波那契数列

(如上,又称为“比内公式”,是用无理数表示有理数的一个范例。)

注:此时a1=1,a2=1,an=a(n-1)+a(n-2)(n>=3,n∈N*)


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);

相关文章更多 >

© 2024版权所有 水水网

电话:171780793