PHP各种算法

                                   PHP各种算法题

a.假设我们第一天在吃饭的时候,掉了一粒米,没有在意,第二天掉了两粒,第三天掉了6粒,此后的每天都会掉落从第一天开始数的天数*前一天掉落的米粒数,问:我们在第10天会掉落多少粒米?

    /*阶乘实现*/
    function jiecheng($mi)
    {
        $arr[1] = 1; //定义第一天掉了一粒米
        for($i=2;$i<=$mi;$i++)
        {
            $arr[$i] = $i*$arr[$i-1];
        }
        $sum = $arr[$mi-1];
        return "我们在第10天的时候会掉".$sum."粒米";
    }
    echo jiecheng(10);
    /*递归实现*/
    function digui($num)
    {
        if($num<0)
        {
            return "shuru ";
        }
        else if($num==0||$num==1)
        {
            return 1;
        }
        else
        {
            return self::digui($num-1)*$num."粒米";   
        }
    }
    echo digui(10);

b.猴子选大王 : m只猴子围坐成一个圈,按顺时针方向从1到m编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到n的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。

    function arr($m){
        for($i=1;$i<=$m;$i++){
            $arr[$i] ='第'.$i.'只';
        }
        return $arr;
    }
    function hz($m,$n){
        $arr = arr($m);
        $j=1;
        while(count($arr)>1)
        {
            if($j%$n != 0)
            {
                array_push($arr,$arr[$j]);
            }
            unset($arr[$j]);
            $j++;
        }
        return $arr;
    }
    print_r(hz(5,4));

c.羊生羊 : 有一母羊,到5岁可生育,每年一头,第一年公羊、第二年母羊,依次循环。到15岁绝育,不再能生,20岁死亡,问n年后有多少头羊?

    function sheep($year)
    {
        static $num = 1; //第一年 定义 一只羊
        for($i=1;$i<=$year;$i++)
        {
            if($i>4&&$i<15) 
            {
                $num++;
                if($i%2==1)    
                {
                    self::sheep($year-$i);   
                }
            }
            if($i==20)
            {
                $num--;
            }
        }
        return $num;
    }

d.斐波那契数列—–递归 (一)

    function recursion($num)
    {
        if($num<1)
        {
            return -1;
        }
        if($num==1||$num==2)
        {
            return 1;
        }
        return recursion($num-1)+recursion($num-2);
    }
    for($i=1;$i<=20;$i++)  //循环显示
    {
        $recursion .= recursion($i).",";
    }
    $recursion = substr($recursion,0,-1);
    echo $recursion;

d.斐波那契数列—–迭代(二)

    function iteration($num)
    {
        if($num<1)
        {
            return -1;
        }
        $a[0] = 1;
        $a[1] = 1;
        for($i=2;$i<=$num;$i++)
        {
            $a[$i] = $a[$i-1]+$a[$i-2];
        }
        return $a;
    }
    $iteration = implode(",",iteration(0)); //拼接成数组
    echo $iteration;

d.斐波那契数列—–数组(三)

    function arrays($num)
    {
        $arr = array();
        for($i=1;$i<=$num;$i++)
        {
            if($i==1||$i==2)
            {
                $arr[$i] = 1;
            }
            else
            {
                $arr[$i] = $arr[$i-1]+$arr[$i-2];
            }
        }
        return $arr;
    }
    print_r(arrays(10));

d.斐波那契数列~~~杨辉三角(四)

    <table border="1">
        <?php 
            $num = 14; 
            $arr = array();
            for($i=1;$i<=$num;$i++)
            {
                echo "<tr>";
                for($j=1;$j<=$i;$j++)
                {
                    if($j==0||$i==$j)
                    {
                        $arr[$i][$j] = 1;
                    }
                    else
                    {
                        $arr[$i][$j] = $arr[$i-1][$j]+$arr[$i-1][$j-1];
                    }
                    echo "<td>";
                    echo $arr[$i][$j];
                    echo "</td>";
                }
                echo "</tr>";
            }
         ?>
     </table>

e.无限极循环—–递归(一)

    function digui($list,$id)  //递归显示
    {
         $arr = array();
         foreach($list as $key=>$val)
         {
            if($id==$val['id'])
            {
                $arr[] = $val;
                $arr = array_merge($arr,digui($list,$val['pid']));
            }
         }
         return $arr;
    }
    print_r(digui($list,26));

e.无限极循环—–迭代(二)

    function diedai($list,$id)  //迭代实现
    {
        $arr = array();
        while($id>0)
        {
            foreach($list as $key=>$val)
            {
                if($val['id']==$id)
                {
                    $arr[] = $val;
                    $id = $val['pid'];
                    break;
                }
            }
        }
        return $arr;
    }
    print_r(diedai($list,26));

e.无限极循环~~~家族树(三)

    function family($list,$pid=0,$level=1)
    {
        $arr = array();
        foreach($list as $key=>$val)
        {
            if($val['pid']==$pid)
            {
                $val['level'] =  $level;
                $val['html'] = str_repeat("**",$level);
                $arr[] = $val;
                $arr = array_merge($arr,family($list,$val['id'],$level+1));
            }
        }
        return $arr;
    }
    $con = family($list,0,1);

f.给美女发红包:今天我给一个妹子发了一毛钱红包,然后她给我发两毛,然后我三毛,她四毛…….到我给她发99.9的时候,她不发了!那么问题来了,我一共亏了多少?

    function redpacket($money){
        $man = -0.1;
        $woman = 0;
        $sum = 0;
        $sums = 0;
        while($man<=$money-0.1){
            $man += 0.2;
            $woman += 0.2;
            $sum = $sum+round($man,2);
            $sums = $sums+round($woman,2);
        }
        $num = $sum-($sums-100);
        return $num;
    }
    echo "我一共欠了".redpacket(99.9)."元";

g.笛卡尔乘积 (一般为goods sku)

Array
(
    [0] => Array
        (
            [0] => M                      Array
            [1] => L                      (   
        )                                       [0] => M-38-男款-黑色
    [1] => Array                                [1] => M-38-女款-黑色
        (                                       [2] => M-39-男款-黑色
            [0] => 38              --->         [3] => M-39-女款-黑色
            [1] => 39                           [4] => L-38-男款-黑色
        )                                       [5] => L-38-女款-黑色
    [2] => Array                                [6] => L-39-男款-黑色
        (                                       [7] => L-39-女款-黑色
            [0] => 男款                     )
            [1] => 女款
        )
    [3] => Array
        (
            [0] => 黑色
        )
)

function CartesianProduct($sets){
    $result = array();
    // 循环遍历集合数据
    for($i=0,$count=count($sets); $i<$count-1; $i++){
       // 初始化
       if($i==0){
         $result = $sets[$i];
       }
       $tmp = array();
       // 结果与下一个集合计算笛卡尔积
       foreach($result as $res){
          foreach($sets[$i+1] as $set){
            $tmp[] = $res."-".$set;
          }
       }
       // 将笛卡尔积写入结果
       $result = $tmp;
    }
    return $result;
}
print_r(CartesianProduct($arr));die;
> h.递归 (算法是,如果当前分类税率是0,则找它的上级,直到找到税率大于0的,返回,如果都没设置,就返回0)
public function getcategory_taxrate($cat_id){

        if(empty($cat_id)){
            return ["code" => 1, "msg" => "未获取到分类id"];
        }
        $category_info = $this->categoty_obj->get_category_one($cat_id);//此处为查询单条  框架实现方式不一样

        $tax = $category_info['tax'];
        if($category_info['parent_id'] == 0){
            return array("code" => 0,"msg" => $tax);
        }else{

            if($category_info['tax'] <= 0){

                return self::getcategory_taxrate($category_info['parent_id']);
            }else{
                return ["code" => 0,"msg" => $tax];
            }

        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值