记录一下:
1,冒泡排序
百科原理:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。个人理解的原理:将其转为数组后,依次循环数组中的元素,分别与数组后面的元素进行比较,小数左移,大数右移到原小数的位置。
public function maopao(){ $arr = [4,30,5,3,99,78,100,12,78,3]; $len = count($arr); //原理:依次循环数组中的元素,分别与数组后面的元素进行比较,小数左移,大数右移到原小数的位置 //外层循环,循环比较的数组元素 for($i=0;$i<$len-1;$i++){ //内层循环,循环被比较的数组元素,挑出最小的数 for($j=$i+1;$j<=$len-1;$j++){ if($arr[$i] > $arr[$j]){ $p = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $p; } } } echo '<pre>';print_r($arr); }//其实,以上流程完全可以用一个函数sort()就可解决,简单明了:
$Arr = [4,30,5,3,99,78,100,12,78,3]; sort($Arr); echo '<pre>';print_r($Arr);2,杨辉三角
个人理解图示:
public function yanghui($id=6){ $Arr = []; //1.循环所有行 for($i=1; $i<=$id; $i++){ //行首为1 $Arr[$i][1] = 1; //2.循环当前行中的列 for($j=1; $j<=$i; $j++){ if($j == $i){ //行尾为1 $Arr[$i][$j] = 1; echo $Arr[$i][$j]; echo '<br/>'; }else{ //其他数为上一行同位置的数+上一行同位置的前一个数之和 @$Arr[$i][$j] = $Arr[$i-1][$j-1] + $Arr[$i-1][$j]; echo $Arr[$i][$j]; echo ' '; } } } echo '<pre>';print_r($Arr); }3,一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,.输出最后那个大王的编号。
/** * $n:猴子数量 * $m:被剔出圈的第m只猴子 */ public function hou($n=11,$m=3){ $Arr = []; for($i=1;$i<=$n;$i++){ $Arr[] = $i; } echo '<pre>';print_r($Arr); $this->bb($Arr,$m); } public function bb($Arr=[],$m=2){ $count = count($Arr); if(count($Arr)==1){ halt('最终猴王:'.$Arr[0]); } if($count < $m){ $mm = $m % $count; //取余数 if($mm == 0){ $mm = $count; } }else{ $mm = $m; } $kk = -1; $mowei = []; foreach($Arr as $key=>$value){ //将$mm位以后的全部移出来 if($kk !== -1){ array_unshift($mowei,$Arr[$key]); unset($Arr[$key]); //删除此末尾值 }else{ if($key + 1 == $mm){ unset($Arr[$key]); $kk = $key; } } } if($mowei){ foreach($mowei as $mo){ //将此值插入Arr数组前面,并重置数组的键值,从0开始 array_unshift($Arr,$mo); } }else{ $Arr = array_values($Arr); //重置数组的键值,从0开始 } // dump($Arr); $this->bb($Arr,$m); }或
function fuhuan($allnum, $ti){ $arr = array(); for($i = 0; $i < $allnum; $i++){ $arr[$i] = $i; } $nums = 1; while(count($arr) > 1){ foreach ($arr as $key => $value) { if($nums == $ti){ unset($arr[$key]); $nums = 1; }else{ $nums++; } } } $new_arr = array_values($arr); var_dump($new_arr[0] + 1); } fuhuan(11,3);