1.要求在一组数中,插入一个新数,并维护原来的排序方式不变
代码语言:javascript复制<?php
//1.要求在一组数中,插入一个新数,并维护原来的排序方式不变
function insertArr($arr,$val){
$pos=0;
if (sizeof($arr)==0) return array($val); //传入数组没有值
if (sizeof($arr)==1){ //传入数组个数为1
return array($val,$arr[0]);
}
//分清排序
$bfind=false;
if ($arr[0]>$arr[sizeof($arr) - 1]){
$bfind=true; //从大到小排序
}else{
$bfind=false;//从小到大排序
}
for($i=0;$i<sizeof($arr);$i ){ //找到要插入值应该插入的位置。
if ($bfind){
if ($arr[$i]<$val){
$pos=$i;
break;
}
}else{
if ($arr[$i]>$val){
$pos=$i;
break;
}
}
}
$left_arr=array();
$right_arr=array();
for ($i=0;$i<sizeof($arr);$i ){ //根据要插入的值把数组分左右两部分。
if ($i<$pos){
$left_arr[]=$arr[$i];
}else{
$right_arr[]=$arr[$i];
}
}
return array_merge($left_arr,array($val),$right_arr);
}
//测试
$arr=array();
var_dump(insertArr($arr,10));echo "<br>";
$arr=array(1);
var_dump(insertArr($arr,10));echo "<br>";
$arr=array(1,2,5,9,13,15);
var_dump(insertArr($arr,10));echo "<br>";
$arr=array(40,15,12,9,8,1);
var_dump(insertArr($arr,10));echo "<br>";
?>
2.用二分法在一个数组中查找你所需元素(针对数字数组,返回值为下标)
代码语言:javascript复制<?php
//二分法
function binarySearch($a, $val){
$low = 0;
$high= count($a) - 1;
while($low <= $high){
$mid = intval(($low $high)/2);
if($a[$mid] == $val) return $mid; //找到相等的就返回所在的位置
if($a[$mid] > $val){ //要查找的在前半截
$high = $mid - 1;
}else{
$low = $mid 1; //要查找的在后半截
}
}
return -1;
}
//测试
$arr=array(1,2,6,8,10);
echo binarySearch($arr,6);
?>
3.打印杨辉三角
代码语言:javascript复制1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
4.冒泡排序(统计一维数组)
代码语言:javascript复制<?php
//冒泡排序(一维数组)
function bubble_sort($arr){
//统计数组中个数
$count = count($arr);
if ($count <= 0) return false;
for($i=0; $i<$count; $i ){
for($j=$count-1; $j>$i; $j--){
if ($arr[$j] < $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
//测试
$_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4');
$_array = bubble_sort($_array);
var_dump($_array);
?>
5.快速排序算法
代码语言:javascript复制<?php
function quick_sort($arr){
if(count($arr)<=1){
return $arr;
}
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($arr);$i ){
if($arr[$i]<=$key){
$left_arr[]=$arr[$i];
}else{
$right_arr[]=$arr[$i];
}
}
$left_arr=quick_sort($left_arr);
$right_arr=quick_sort($right_arr);
return array_merge($left_arr,array($key),$right_arr);
}
//使用实例
$_array = array('6', '8' ,'7' ,'6' ,'9' ,'2' ,'2' ,'4');
$_array = quick_sort($_array);
var_dump($_array);
?>
7.选择排序
代码语言:javascript复制<?php
function select_sort($arr) {
//实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
//$i 当前最小值的位置, 需要参与比较的元素
for($i=0, $len=count($arr); $i<$len-1; $i ) {
//先假设最小的值的位置
$p = $i;
//$j 当前都需要和哪些元素比较,$i 后边的。
for($j=$i 1; $j<$len; $j ) {
//$arr[$p] 是 当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时,
// 应该采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。
//如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
$arr = [1,2,0,4,5,6];
$data = select_sort($arr);
var_dump($data);
8.公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目。
代码语言:javascript复制<?php
$totalmoney=100;
$totalchicken=100;
$cocknum = intval($totalmoney/3); //全买公鸡的数目
$hennum = intval($totalmoney/5); //全买母鸡的数目
$biddynum = 100; //小鸡数为100
for ($i=1;$i<$cocknum;$i ){ //公鸡数
for ($j=1;$j<$hennum;$j ){//母鸡数
for ($k=1;$k<$biddynum;$k ){//小鸡数
$money = $i * 3 $j * 5 $k / 3;
$total = $i $j $k;
if (($money == $totalmoney) &&($total == $totalchicken)){
echo "公鸡:" . $i . "只,母鸡:" . $j ."只,小鸡:" . $k ."只<Br>";
}
}
}
}
?>
9.小猴第一天摘下若干枣子,当即吃掉了一半,不过瘾又多吃了一个;第二天吃了剩下的一半又多吃了一个;以后每一天都吃了前一天剩下的一半多一个。到第十天小 猴再想吃时,见到只剩下一只枣子了。问第一天这堆枣子有多少?
代码语言:javascript复制<?php
//倒推算法。
function getTotal($day){
$total=0;
if ($day==1){ //第一天为一个
$total = 1;
}else{ //以后每一天为前一天的两个加上一个。
$total = 2*(getTotal($day-1) 1);
}
return $total;
}
//测试
echo getTotal(10);
?>
10.一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为2 5美分、1 0美 分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩
代码语言:javascript复制<?php
$totalmoney=100; //总钱数(美分)
$consumemoney=11; //花去的钱
$complet=false; //找钱完成
$change=0;
//找零25,10,5,1美分钱的个数
$ch25 = 0;
$ch10 = 0;
$ch5 = 0;
$ch1 = 0;
for(;;){
if ($complet) break;
$left=$totalmoney - $consumemoney - $change; //还没有找的钱
if ($left <= 0) {
$complet = true;
}else{
if ($left >= 25){ //找25美分钱
$change = $change 25;
$ch25 = $ch25 1;
}else if ($left >= 10 ){//找10美分钱
$change = $change 10;
$ch10 = $ch10 1;
}else if ($left >= 5){//找5美分钱
$change = $change 5;
$ch5 = $ch5 1;
}else{//找1美分钱
$change = $change 1;
$ch1 = $ch1 1;
}
}
}
echo "剩余零钱 " . ($totalmoney - $consumemoney) . " 美分<br>";
echo "找25美分 " . $ch25 . " 个<br>";
echo "找10美分 " . $ch10 . " 个<br>";
echo "找 5美分 " . $ch5 . " 个<br>";
echo "找 1美分 " . $ch1 . " 个<br>";
?>
11.五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,发现还多一个,它吃掉这桃子,并拿走了 其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。第三只,第四只,第五只猴子都依次如此分食桃子。 那么桃子数最少应该有几个呢?
代码语言:javascript复制<?php
echo "start";
for ($y=16;;$y =4){
if (($y-1)%5!=0) continue;
$x=$y;
for ($i=4;$i>=1&&$x%4==0;$i--){
$x=($x/4)*5 1;
}
if ($i==0){
echo "桃子最少应该有:" . $x;
break;
}
}
?>
12.请使用一句话将类似“1910-09-09”的日期各式转换为“一九一零年九月九日”这样的各式。(需要有通用性,是不是一句话不是关键,但不允许使用 ifswitchwhilefor等语句)
代码语言:javascript复制<?php
function changeDate($str)
{
//去除符号'-'
$pattern='/(d )-(0*)([1-9] )-(0*)([1-9] )/';
$replace='${1}年${3}月${5}日';
$str= preg_replace($pattern, $replace, $str);
//替换数字
$patterns=array("/0/","/1/","/2/","/3/","/4/","/5/","/6/","/7/","/8/","/9/");
$replaces=array("零","一","二","三","四","五","六","七","八","九");
$re = preg_replace($patterns, $replaces, $str);
return $re;
}
$str = '2019-01-16';
echo changeDate($str);//二零一九年一月一六日