算法
来源:互联网 发布:单片机模块化编程教程 编辑:程序博客网 时间:2024/06/05 17:10
1.判断一个数是否为素数(质数)
<?phpfunction get_prime($num){ if($num<=1){ return false; } $sq = intval(sqrt($num)); for ($i=2; $i <= $sq; $i++) { if(($num % $i) == 0 ){ break; } } if($i > $sq){ echo $num.'是素数'; }else{ echo $num.'不是素数'; }}get_prime(10);
2.获取n以内的所有素数(质数)
<?phpfunction get_primes($n){ if($n <= 1){ return false; } $primes = array(2); for($i = 3; $i <= $n; $i += 2){ $sq = intval(sqrt($i)); for($j = 3; $j <= $sq; $j += 2){ if(($i % $j) == 0){ break; } } if($j > $sq){ array_push($primes, $i); } } return $primes;}print_r(get_primes(27));
3.石头剪刀布判断
- 当两个数相等时为平局
- 当p2加一除以3的余数等于p1,则p2获胜
<?php//0 石头 1剪刀 2布function fingerGuess($p1, $p2){ if($p1 == $p2){ echo 'draw'; }else if($p1 == ($p2+1)%3){ echo 'p2 win!'; }else{ echo 'p1 win!'; }}fingerGuess(0,2);
4.约瑟夫环
一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, 再数到第m只,在把它踢出去…,如此不停的进行下去, 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号
<?php/** * 获取猴王 * @param int $n * @param int $m * @return int */function get_king_mokey($n, $m) { $arr = range(1, $n); $i = 0; while (count($arr) > 1) { $i++; $tmp = array_shift($arr); if($i % $m != 0){ array_push($arr, $tmp); } } return $arr[0];}
5.顺序查找(哨兵)
<?php/** * 不使用哨兵顺序查找 * @param array $arr 数组 * @param int $res 目的数字 * @return int 返回数字 */function search($arr, $res){ for ($i=0; $i < count($arr); $i++) { if($arr[$i] == $res){ return $i; } } return 0;}$arr = array(2, 23, 44, 231, 2315, 21);if(search($arr, 23) > 0 ){ echo "found!";}else{ echo "not found!";}echo "<br>";/** * 使用哨兵顺序查找 * @param array $arr 数组 * @param int $res 目的数字 * @return int 返回数字 */function search_sentry($arr, $res) { // 哨兵 $arr[count($arr)] = $res; $i = 0; while ($arr[$i] != $res) { $i++; } return $i;}$arr = array(2, 23, 44, 231, 2315, 21);if(search_sentry($arr, 24) == count($arr)){ echo "not found!";}else{ echo "found!";}
5.冒泡排序
<?php/** * 冒泡排序1 * @param array $arr 需要排序的数组 * @return array 排序好的数组 */function bubble_sort($arr) { for ($i=1; $i < count($arr); $i++) { for ($j=0; $j < count($arr) - $i; $j++) { if($arr[$j] > $arr[$j+1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tmp; } } } return $arr;}$arr = array(3, 4, 65, 312, 23);var_dump(bubble_sort($arr));/** * 冒泡排序2 * @param array $arr 需要排序的数组 * @return array 排序好的数组 */function bubble2_sort($arr2){ for ($i = count($arr2)-1; $i > 0 ; $i--) { for ($j=0; $j < $i; $j++) { if($arr[$j] > $arr[$j+1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tmp; } } }}$arr = array(3, 4, 65, 44, 23, 1, 15);var_dump(bubble_sort($arr));
6.一个数组里最小的1000个数
思路:假设最前面的1000个数为最小的,算出这1000个数中最大的数,然后和第1001个数比较,如果这最大的数比这第1001个数小的话跳过,如果要比这第1001个数大则将两个数交换位置,并算出新的1000个数里面的最大数,再和下一个数比较,以此类推。
<?php/** * 获取最小的k个数 * @param array $arr 整个数组 * @param int $k 指定的k位 * @return array 最小的k个数的数组 */function get_min_array($arr, $k) { $n = count($arr); $min_array = array(); for ($i=0; $i < $n; $i++) { if($i < $k){ $min_array[$i] = $arr[$i]; }else{ if($i == $k){ $max_pos = get_max_pos($min_array); $max = $min_array[$max_pos]; } if($arr[$i] < $max){ $min_array[$max_pos] = $arr[$i]; $max_pos = get_max_pos($min_array); $max = $min_array[$max_pos]; } } } return $min_array;}/** * 获取数组中最大值的下标 * @param array $arr 数组 * @return int 最大值下标 */function get_max_pos($arr){ $pos = 0; for ($i=1; $i < count($arr); $i++) { if($arr[$i] > $arr[$pos]){ $pos = $i; } } return $pos;}$arr = array(3, 5, 2, 23, 1, 15, 2, 16, 4);var_dump(get_min_array($arr, 5));
7.打乱数组
php自带的打乱数组函数:shuffle()
<?php/** * 打乱数组 * @param array 数组 * @return array 打乱的数组 */function diy_shuffle($arr) { $n = count($arr); for ($i=0; $i < $n; $i++) { $rand_pos = mt_rand(0, $n-1); if($i != $rand_pos){ $tmp = $arr[$i]; $arr[$i] = $arr[$rand_pos]; $arr[$rand_pos] = $tmp; } } return $arr;}$arr = array(1, 2, 3, 4, 5);var_dump(diy_shuffle($arr));
8.两个有序int集合是否有相同元素的最优算法
<?php/** * 有序int数组的相同元素 * @param array $arr1 数组1 * @param array $arr2 数组2 * @return array 相同元素数组 */function find_array($arr1, $arr2) { $i = $j = 0; $common_array = array(); while($i < count($arr1) && $j < count($arr2)){ if($arr1[$i] < $arr2[$j]){ $i++; }else if($arr1[$i] > $arr2[$j]){ $j++; }else{ $common_array[] = $arr1[$i]; $i++; $j++; } } return $common_array;}$arr1 = array(1, 4, 5, 7, 9, 14, 17);$arr2 = array(2, 3, 5, 7, 8, 9, 14);var_dump(find_array($arr1, $arr2));
阅读全文
0 0
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 安装Scrapy遇到的坑(python)
- 批处理中的&、&&、|、||、>、>>符号
- 当安装好Xgboost后当调用其函数出现``` AttributeError: module 'xgboost' has no attribute 'feature_importance_'
- 时间戳转换
- 我应该选一所什么学校--所有选择,都应基于你的需要
- 算法
- php魔术方法__call和__callStatic
- 在函数内不正确地使用了 'getdate'。
- 最新版本sublime text3注册码
- java图片验证码
- 结构化数据、半结构化数据、非结构化数据
- 无人机电机控制开发-厉害了科技不断改进---凯利讯半导体
- 第二章、Spring MVC入门
- 浅谈微服务基建的逻辑