PHPクラシック面白いアルゴリズム収集(面接問題)

7691 ワード

本文はPHPの経典の面白いアルゴリズムを記録するために収集して、そして注釈と分析を加えて、自分ですでに全部試みたことがあります.
1、サルの群れがぐるぐる並んで、1、2、…、nの順に番号をつけます.そして1匹目から数えて、m匹目まで数えて、それを輪から蹴り出して、その後ろから数えて、m匹目まで数えて、それを蹴り出して...、このようにひっきりなしに進んで、最後にサルが1匹しか残っていないまで、そのサルは大王と呼ばれていました.このプロセスをプログラミングしてシミュレーションし、m、nを入力し、最後の王の番号を出力する必要があります.
 

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 。

 

 


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、

 


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 "
"; 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"
"; } } } $yh=new T('3'); //$yh=new T( ); $yh->display(); ?>

 

4.

 


function maopao($arr){
    $len = count($arr); 
    for($k=0;$k<=$len;$k++)
    {
        for($j=$len-1;$j>$k;$j--){
          if($arr[$j]

5.

 


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 $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. ( )

 


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]

 


7.PHP

 

 

 



PHP7 6,PHP7 5 , , , PHP7 BUG

 

8. : , , ( )

 


function set($str){
    //     
    $arr = str_split($str);
    //    
    $arr = array_flip(array_flip($arr));
    //  
    sort($arr);
    //     
    return implode('', $arr);
}

 

9.

 

 


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

 


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

 

 


function jieti($num){	//          
		return $num<2?1:jieti($num-1)+jieti($num-2);
	}

 

12. PHP ,

 


 

 

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