国产精品久久久久久久,女人的诱惑,亚洲中文无码亚洲人成软件,亚洲尺码一区二区三区,

  • 微信
    咨詢
    微信在線咨詢 服務時間:9:00-18:00
    縱橫數據官方微信 使用微信掃一掃
    馬上在線溝通
  • 業務
    咨詢

    QQ在線咨詢 服務時間:9:00-18:00

    選擇下列產品馬上在線溝通

    縱橫售前-老古
    QQ:519082853 售前電話:18950029581
    縱橫售前-江夏
    QQ:576791973 售前電話:19906048602
    縱橫售前-小李
    QQ:3494196421 售前電話:19906048601
    縱橫售前-小智
    QQ:2732502176 售前電話:17750597339
    縱橫售前-燕子
    QQ:609863413 售前電話:17750597993
    縱橫值班售后
    QQ:407474592 售后電話:400-1886560
    縱橫財務
    QQ:568149701 售后電話:18965139141

    售前咨詢熱線:

    400-188-6560

    業務姚經理:18950029581

  • 關注

    關于縱橫數據 更多優惠活動等您來拿!
    縱橫數據官方微信 掃一掃關注官方微信
  • 關閉
  • 頂部
  • 您所在的位置 : 首頁 > 新聞公告 > php經典趣味算法

    php經典趣味算法

    1、一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    function king($n, $m){

        $monkeys = range(1, $n);         //創建1到n數組

        $i=0;

        while (count($monkeys)>1) {   //循環條件為猴子數量大于1

            if(($i+1)%$m==0) {   //$i為數組下標;$i+1為猴子標號

                unset($monkeys[$i]);    //余數等于0表示正好第m個,刪除,用unset刪除保持下標關系

            } else {

                array_push($monkeys,$monkeys[$i]);     //如果余數不等于0,則把數組下標為$i的放最后,形成一個圓形結構

                unset($monkeys[$i]);

            }

                $i++;//$i 循環+1,不斷把猴子刪除,或 push到數組

        }

        return current($monkeys);   //猴子數量等于1時輸出猴子標號,得出猴王

    }

    echo king(6,3);


    2、有一母牛,到4歲可生育,每年一頭,所生均是一樣的母牛,到15歲絕育,不再能生,20歲死亡,問n年后有多少頭牛。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    function niu($y){

        static $num= 1;                 //定義靜態變量;初始化牛的數量為1

        for ($i=1; $i <=$y ; $i++) {    

            if($i>=4 && $i<15){         //每年遞增來算,4歲開始+1,15歲不能生育

            $num++;

                niu($y-$i);             //遞歸方法計算小牛$num,小牛生長年數為$y-$i

            }else if($i==20){          

            $num--;                          //20歲死亡減一

            }

        return $num;

    }

    }

    3、楊輝三角

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    <?php

    /* 默認輸出十行,用T(值)的形式可改變輸出行數 */

    class T{

      private $num;

      public function __construct($var=10) {

        if ($var<3) die("值太小啦!");

        $this->num=$var;

      }

      public function display(){

        $n=$this->num;

        $arr=array();

      //$arr=array_fill(0,$n+1,array_fill(0,$n+1,0));

        $arr[1]=array_fill(0,3,0);

        $arr[1][1]=1;

        echo str_pad(" ",$n*12," ");

        printf("%3d",$arr[1][1]);

        echo "<br/>";

        for($i=2;$i<=$n;$i++){

          $arr[$i]=array_fill(0,($i+2),0);

          for($j=1;$j<=$i;$j++){

            if($j==1)

              echo str_pad(" ",($n+1-$i)*12," ");

            printf("%3d",$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j]);

            echo "  ";

          }

          echo"<br/>";

        }

      }

    }

    $yh=new T('3'); //$yh=new T(數量);

    $yh->display();

    ?>

    4.冒泡排序

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    function maopao($arr){

        $len = count($arr);

        for($k=0;$k<=$len;$k++)

        {

            for($j=$len-1;$j>$k;$j--){

              if($arr[$j]<$arr[$j-1]){

                $temp = $arr[$j];

                $arr[$j] = $arr[$j-1];

                $arr[$j-1] = $temp;

              }

            }

        }

        return $arr;

    }

    5.快速排序

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    function quickSort($arr) {

        //先判斷是否需要繼續進行

        $length = count($arr);

        if($length <= 1) {

            return $arr;

        }

        //選擇第一個元素作為基準

        $base_num = $arr[0];

        //遍歷除了標尺外的所有元素,按照大小關系放入兩個數組內

        //初始化兩個數組

        $left_array = array();  //小于基準的

        $right_array = array();  //大于基準的

        for($i=1; $i<$length; $i++) {

            if($base_num > $arr[$i]) {

                //放入左邊數組

                $left_array[] = $arr[$i];

            } else {

                //放入右邊

                $right_array[] = $arr[$i];

            }

        }

        //再分別對左邊和右邊的數組進行相同的排序處理方式遞歸調用這個函數

        $left_array = quickSort($left_array);

        $right_array = quickSort($right_array);

        //合并

      

        return array_merge($left_array, array($base_num), $right_array);

    }

    6.二分查找算法(折半查找算法)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    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;

            } else{

                return $middle;

            }

        }

        return false;

    }

    7.PHP奇異算法

    1

    2

    3

    4

    5

    6

    7

    <?php

    function test(){

     $a=1;

     $b=&$a;

     echo (++$a)+(++$a);

    }

    test();

    PHP7以下的版本返回的是 6,PHP7版本返回5 ,還真的算奇異,個人底層算法差,認為是PHP7以下版本的BUG

    8.字符集合:輸入一個字符串,求出該字符串包含的字符集合,并按順序排序(英文)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    function set($str){

        //轉化為數組

        $arr = str_split($str);

        //去除重復

        $arr = array_flip(array_flip($arr));

        //排序

        sort($arr);

        //返回字符串

        return implode('', $arr);

    }

    9.遍歷一個文件下的所有文件和子文件夾下的文件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    function AllFile($dir){

        if($dh = opendir($dir)){

            while (($file = readdir($dh)) !== false){

                if($file !='..' && $file !='.'){

                    if(is_dir($dir.'/'.$file)){

                        AllFile($dir.'/'.$file);    //如果判斷還是文件,則遞歸

                    }else

                        echo $file;         //輸出文件名

                    }

                }

            }

        }

    }

    10.從一個標準的Url提取出文件的擴展名

    1

    2

    3

    4

    5

    6

    7

    function getExt($url)

      {

        $arr = parse_url($url);

        $file = basename($arr['path']);// basename函數返回路徑中的文件名部分

        $ext = explode('.', $file);

        return $ext[count($ext)-1];

      }

    11.有個人想上一個n級的臺階,每次只能邁1級或者邁2級臺階,問:這個人有多少種方法可以把臺階走完?例如:總共3級臺階,可以先邁1級再邁2級,或者先邁2級再邁1級,或者邁3次1級總共3中方式

    1

    2

    3

    function jieti($num){   //實際上是斐波那契數列

            return $num<2?1:jieti($num-1)+jieti($num-2);

        }

    12.請寫一段PHP代碼,確保多個進程同時寫入同一個文件成功

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    <?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.無限級分類

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    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.獲取上個月第一天 和 最后一天

    1

    2

    3

    4

    5

    //獲取上個月第一天

        date('Y-m-01',strtotime('-1 month'));

      

        //獲取上個月最后一天

        date('Y-m-t',strtotime('-1 month'));

    15.隨機輸入一個數字能查詢到對應的數據區間

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    //把區間換成數組寫法,用二分法查找區間

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


    最新推薦


    微信公眾帳號
    關注我們的微信