php算法练习题

时间:2023-02-12 22:51:52
1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
<?php
$num = 0;
for($i=1;$i<=4;$i++) {
for($j=1;$j<=4;$j++) {
for($k=1;$k<=4;$k++) {
if($i != $j && $j != $k&& $i != $k) {
$num = $num + 1;
}
}
}
}
echo $num;
?>
 
2.有5个人偷了一堆苹果,准备在第二天分赃。晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了。
  没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的那一个扔给了猴,偷走了1/5。
  第二天,大家分赃,也是分成5份多一个扔给猴了。最后一人分了一份。问:共有多少苹果?
<?php
for($i=1; ;$i++) {
if($i % 5 == 1) {
//第一次
$t = $i - round($i/5) - 1;
if($t % 5 == 1) {
//第二次
$r = $t - round($t/5) - 1;
if($r % 5 == 1) {
//第三次
$x = $r - round($r/5) - 1;
if($x % 5 == 1) {
//第四次
$y = $x - round($x/5) - 1;
if($y % 5 == 1) {
//第五次
$s = $y - round($y/5) - 1;
if($s % 5 == 1) {
echo $i;
break;
}
}
}
}
}
}
}
?>
 
3.一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,
如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。
<?php
function king($n,$m) {
$monkeys = range(1,$n);
$i = 0;
while(count($monkeys) > 1) {
if(($i+1)%$m == 0) {
unset($monkeys[$i]);
} else {
array_push($monkeys,$monkeys[$i]);
unset($monkeys[$i]);
}
$i++;
}
return current($monkeys);
}
$king = king($n,$m);
print_r($king);
?>
 
 
4. 用符号*画一个菱形图案.
<?php
for($i=0;$i<4;$i++){
for($j=0;$j<3-$i;$j++){
echo '&nbsp;';
}
for($k=0;$k<$i+1;$k++){
echo '* ';
}
echo "<br/>";
}
for($i=3;$i>=0;$i--) {
for($x=0;$x<=3-$i;$x++) {
echo '&nbsp;';
}
for($y=0;$y<$i;$y++) {
echo '* ';
}
echo '<br/>';
}
?>
 
5.使用五种以上方式获取一个文件的扩展名.
<?php?
① function get_ext1($file_name){ 
return strrchr($file_name, ‘.’); 
备注: strrchr //找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
 
② function get_ext2($file_name){ 
return substr($file_name, strrpos($file_name,‘.’)); 
备注: strrpos //查找字符串在另一个字符串中最后一次出现的位置。
 
③ function get_ext3($file_name){ 
return array_pop(explode(‘.’,$file_name)); 
备注: array_pop //删除数组中的最后一个元素。
 
④ function get_ext4($file_name){ 
$p = pathinfo($file_name); 
return $p['extension']; 
备注: pathinfo //以数组的形式返回文件路径的信息。
 
⑤ function get_ext5($file_name){ 
return strrev(substr(strrev($file_name), 0,strpos(strrev($file_name), ‘.’)));  
}
备注: strrev //反转字符串 
     strpos//返回字符串在另一个字符串中第一次出现的位置。
?>
 
6.实现斐波那契数列,格式为:1,1,2,3,5,8…即当前数字为前两个数字之和.
<?php
function feibolaqi($num) {
$arr = array();
for($i=0;$i<=$num;$i++) {
if($i == 1 || $i == 2) {
$arr[$i-1] = 1;
} else {
$arr[$i-1] = $arr[$i-2] + $arr[$i-3];
}
}
return $arr;
}
?>
 
**************************************************************************************************
<?  
//--------------------  
// 基本数据结构算法 
//--------------------  
//二分查找(数组里查找某个元素)  
function bin_sch($array,  $low, $high, $k){  
    if ( $low<= $high){  
       $mid =  intval(($low+$high)/2);   
       if ($array[$mid] ==  $k){  
           return$mid;   
       }elseif ( $k < $array[$mid]){  
           return bin_sch($array, $low,  $mid-1,$k);   
       }else{  
           return bin_sch($array, $mid+ 1, $high, $k);  
       }   
    }  
    return -1;  
}   
//顺序查找(数组里查找某个元素)  
function  seq_sch($array, $n, $k){   
    $array[$n] = $k;   
    for($i=0; $i<$n; $i++){  
       if( $array[$i]==$k){  
           break;  
       }   
    }  
    if($i<$n){   
       return  $i;  
    }else{  
       return -1;  
    }  
}   
//线性表的删除(数组中实现)  
function delete_array_element($array , $i) 
{  
       $len =  count($array);  
       for ($j= $i; $j<$len; $j ++){ 
              $array[$j] = $array [$j+1]; 
       }  
       array_pop ($array);  
       return $array ;  
}  
//冒泡排序(数组排序)  
function bubble_sort( $array)  
{  
       $count = count( $array); 
       if ($count <= 0 ) return false; 
       for($i=0 ; $i<$count; $i ++){ 
              for($j=$count-1 ;$j>$i; $j--){  
                     if($array[$j] < $array [$j-1]){ 
                            $tmp = $array[$j]; 
                            $array[$j] = $array[ $j-1]; 
                           $array [$j-1] = $tmp;  
                     } 
              }  
       }  
       return $array;  
}  
//快速排序(数组排序)  
function quick_sort($array ) {  
       if (count($array) <= 1) return $array;  
       $key = $array [0];  
       $left_arr  = array(); 
       $right_arr = array();  
       for ($i= 1; $i<count($array );$i++){  
              if ($array[ $i]<= $key)  
                     $left_arr[] = $array[$i];  
              else  
                     $right_arr[] = $array[$i ]; 
       }  
       $left_arr = quick_sort($left_arr ); 
       $right_arr = quick_sort( $right_arr); 
       return array_merge($left_arr , array($key),$right_arr);  
}  
 
//------------------------  
// PHP内置字符串函数实现  
//------------------------  
//字符串长度  
function strlen ($str)  
{  
       if ($str == '' ) return 0; 
       $count =  0; 
       while (1){  
              if ( $str[$count] != NULL){ 
                     $count++;  
                     continue; 
              }else{ 
                     break; 
              }  
       }  
       return $count;  
}  
//截取子串  
function substr($str, $start,  $length=NULL) 
{  
       if ($str== '' ||$start>strlen($str )) return; 
       if (($length!=NULL)&& ( $start>0)&& ($length>strlen($str)-$start)) return;  
       if (( $length!=NULL)&& ($start< 0)&&($length>strlen($str )+$start)) return; 
       if ($length ==  NULL) $length =(strlen($str ) - $start);  
         
       if ($start < 0){  
              for ($i=(strlen($str)+$start); $i<(strlen ($str)+$start+$length );$i++) {  
                     $substr .= $str[$i];  
              }  
       }  
       if ($length  >0){  
              for ($i= $start;$i<($start+$length ); $i++) { 
                     $substr .= $str[$i];  
              }  
       }  
       if ( $length < 0){ 
              for ($i =$start;$i<(strlen( $str)+$length); $i++) { 
                     $substr .=$str[$i ];  
              }  
       }  
       return $substr;  
}  
//字符串翻转  
function strrev($str)  
{  
       if ($str == '') return 0 ; 
       for ($i=(strlen($str)- 1); $i>=0;$i --){  
              $rev_str .= $str[$i ]; 
       }  
       return $rev_str;  
}  
 
//字符串比较  
function strcmp($s1,  $s2) 
{  
       if (strlen($s1) < strlen($s2)) return -1 ;  
       if (strlen($s1) > strlen( $s2))return 1;  
       for ($i =0; $i<strlen($s1 );$i++){  
              if ($s1[ $i] == $s2[$i]){ 
                     continue; 
              }else{ 
                     returnfalse;  
              }  
       }  
       return  0; 
}  
 
//查找字符串  
function  strstr($str, $substr) 
{  
        $m = strlen($str); 
       $n = strlen($substr );  
       if ($m < $n) return false ; 
       for ($i=0; $i <=($m-$n+1); $i++){  
              $sub = substr( $str, $i, $n); 
              if ( strcmp($sub, $substr) == 0)  return $i; 
       }  
       return false ;  
}  
//字符串替换  
function str_replace($substr , $newsubstr, $str) 
{  
        $m = strlen($str); 
       $n = strlen($substr );  
       $x = strlen($newsubstr ); 
       if (strchr($str, $substr ) == false) returnfalse;  
       for ( $i=0; $i<=($m- $n+1);$i++){  
               $i =strchr($str,  $substr);  
              $str = str_delete ($str, $i,$n);  
              $str = str_insert($str, $i, $newstr);  
       }  
       return $str ;  
}  
 
//--------------------  
// 自实现字符串处理函数 
//--------------------  
//插入一段字符串  
function str_insert($str, $i , $substr) 
{  
       for($j=0 ; $j<$i; $j ++){ 
              $startstr .= $str[$j ]; 
       }  
       for ($j=$i; $j <strlen($str); $j++){  
              $laststr .= $str[$j ]; 
       }  
       $str = ($startstr . $substr  .$laststr);  
       return $str ;  
}  
//删除一段字符串  
function str_delete($str , $i, $j)  
{  
       for ( $c=0; $c<$i; $c++){  
              $startstr .= $str [$c]; 
       }  
       for ($c=( $i+$j); $c<strlen($str); $c++){  
              $laststr  .=$str[$c];  
       }  
        $str = ($startstr . $laststr);  
       return $str;  
}  
//复制字符串  
function strcpy($s1, $s2 )  
{  
       if (strlen($s1)==NULL || !isset( $s2)) return; 
       for ($i=0 ; $i<strlen($s1); $i++){  
              $s2[] = $s1 [$i]; 
       }  
       return $s2;  
}  
//连接字符串  
function strcat($s1 , $s2)  
{  
       if (!isset($s1) || !isset( $s2)) return; 
       $newstr = $s1 ;  
       for($i=0; $i <count($s); $i ++){ 
              $newstr .= $st[$i ]; 
       }  
       return $newsstr;  
}  
//简单编码函数(与php_decode函数对应)  
function php_encode($str)  
{  
       if ( $str=='' &&strlen( $str)>128) return false; 
       for( $i=0; $i<strlen ($str);$i++){  
               $c =ord($str[$i ]);  
              if ($c>31&& $c <107) $c += 20;  
              if ($c>106&& $c <127) $c -= 75;  
              $word = chr($c ); 
              $s .= $word; 
       }   
       return $s;  
}  
//简单解码函数(与php_encode函数对应)  
function php_decode($str)  
{  
       if ( $str=='' &&strlen($str )>128) return false; 
       for( $i=0; $i<strlen ($str);$i++){  
              $c  =ord($word);  
              if ( $c>106&& $c<127 ) $c =$c-20;  
              if ($c>31&& $c< 107) $c =$c+75 ;  
              $word = chr( $c); 
              $s .= $word ; 
       }   
       return $s;  
}  
//简单加密函数(与php_decrypt函数对应)  
function php_encrypt($str)  
{  
        $encrypt_key ='abcdefghijklmnopqrstuvwxyz1234567890';  
        $decrypt_key ='ngzqtcobmuhelkpdawxfyivrsj2468021359';  
       if ( strlen($str) == 0) return false;  
       for ($i=0; $i<strlen($str); $i ++){ 
              for ($j=0; $j<strlen($encrypt_key); $j ++){ 
                     if($str[$i] == $encrypt_key [$j]){  
                           $enstr .=  $decrypt_key[$j]; 
                           break;  
                     } 
              }  
       }  
       return $enstr;  
}  
//简单解密函数(与php_encrypt函数对应)  
function php_decrypt($str)  
{  
        $encrypt_key ='abcdefghijklmnopqrstuvwxyz1234567890';  
        $decrypt_key ='ngzqtcobmuhelkpdawxfyivrsj2468021359';  
       if ( strlen($str) == 0) return false;  
       for ($i=0; $i<strlen($str); $i ++){ 
              for ($j=0; $j<strlen($decrypt_key); $j ++){ 
                     if($str[$i] == $decrypt_key [$j]){  
                           $enstr .=  $encrypt_key[$j]; 
                           break;  
                     } 
              }  
       }  
       return $enstr;  
}  
?>