算法题(输出乘法表、输出三角形组)

 1.输出乘法表

/**
* 输出乘法表 
*/
public function multiplyTbale(){
        for ($i=9;$i<=9;$i++){    //循环行数
            for ($j=1;$j<=9;$j++){    //循环乘数第一位数
                for ($k=9;$k>=$j;$k--){    //循环乘数第二位数
                    echo $j."*".$k."=".$j*$k;
                    echo "&nbsp;&nbsp;";
                }
                echo "<br>";
            }
        }
    }

 

2.根据数组,得出三角形组

/**
     * 根据数组,得出三角形组
     * 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?
     */
    public function actionSan($arr=[4,4,4,4]){
        $i = 0;
        foreach ($arr as $key =>$value){
            unset($arr[$key]);    //删除第一条边
            $arr1 = $arr;
            foreach ($arr1 as $key1 =>$value1){
                unset($arr1[$key1]);    //删除第二条边
                $arr2 = $arr1;
                foreach ($arr2 as $key2 =>$value2){
                    if(($value+$value1)>$value2 || ($value==$value1&&$value==$value2)){    //两边之后大于第三边 或者 三边都相等
                        $i++;
                        echo "(".$value.",".$value1.",".$value2.")";echo "<br>";
                    }
                }
            }
        }
    }

3.倒序输出指定日期前几个月日期

 public function Months(){
        $date = "2020-10-01";
        $i = 1;
        while($i <= 8){
            echo date("Y-m-d ",strtotime("-$i months",strtotime($date)));echo "<br>";
            $i++;
        }
    }

 

4.使用php实现,给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

/**
     * 使用php实现,给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
     */
    public function actionRevint($int = 123450){
        $res = 0;
        while($int != 0)
        {
            $temp = $int % 10;    //获取余数
            $int = intval($int) / 10;    //目标数除以10
            $res = $res * 10 + $temp;    //目标数乘以10加余数,形成翻转
        }

        if($res > PHP_INT_MAX || $res < PHP_INT_MIN) {    //判断翻转后的整数是否大于最大整数或小于最小整数,溢出
            return 0;
        }else{
            return $res;
        }
    }

 

5.斐波那契数列求和算法

/**
     * 非递归写法
     * 斐波那契数列求和 [0,1,1,2,3,5,8,13,21,34]
     * 数组规律:后一位是前两位数之和
     * 数组个数: int $n
    */
    function fbnq($n=5){
        if($n <= 0){
            return 0;
        }

        $arr[0] = 0;
        $arr[1] = 1;    //设置斐波那契数列的第一值和第二个值
        for($i=2; $i<=$n; $i++){
            $arr[$i] = $arr[$i-1] + $arr[$i-2];
        }
        return $arr;
    }

    /**
     * 递归写法
     * 斐波那契数列求和 [0,1,1,2,3,5,8,13,21,34]
     * 数组规律:后一位是前两位数之和
     * 数组个数: int $n
     */
    function fbnq2($n=8){
        if($n==1 || $n==2 ){
            return 1;
        }else{
            return $this->fbnq2($n-1) + $this->fbnq2($n-2);
        }
    }

6.交错合并两个数组

/**
     * 交错合并两个数组
     * 返回
     */
    function cross_merge_array($arr1 = array('a', 'b', 'c'), $arr2=array('1', '2', '3'))
    {
        $arr1 = array_values($arr1);
        $arr2 = array_values($arr2);
        $count = max(count($arr1), count($arr2));    //获取两数组中最大的数组长度
        $arr = array();
        for ($i = 0; $i < $count; $i++) {
            if ($i < count($arr1)) $arr[] = $arr1[$i];    // 判断,避免 $arr1 下标越界
            if ($i < count($arr2)) $arr[] = $arr2[$i];    // 判断,避免 $arr2 下标越界
        }
        return $arr;  //返回 array('a', '1', 'b', '2', 'c', '3');
    }

猜你喜欢

转载自blog.csdn.net/weixin_43452467/article/details/113939806