php算法练习题

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 ='abcdefghijklmnopqrstuvwx yz1234567890';  
             $decrypt_key ='ngzqtcobmuhelkpdawxfyivr sj2468021359';  
           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 ='abcdefghijklmnopqrstuvwx yz1234567890';  
             $decrypt_key ='ngzqtcobmuhelkpdawxfyivr sj2468021359';  
           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;  
}  
?> 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值