几个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 " "; } for($k=0;$k<$i+1;$k++){ echo "* "; } echo "<br/>"; } for($i=3;$i>=0;$i--) { for($x=0;$x<=3-$i;$x++) { echo " "; } 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; } ?>
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 " "; } for($k=0;$k<$i+1;$k++){ echo "* "; } echo "<br/>"; } for($i=3;$i>=0;$i--) { for($x=0;$x<=3-$i;$x++) { echo " "; } 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; } ?>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: php面试必知必会常见问题
- 下一篇:没有了