wordpress jp theme,关键词排名优化公司成都,网站建设的概要设计,济南正规做网站公司1、一群猴子排成一圈#xff0c;按1#xff0c;2#xff0c;…#xff0c;n依次编号。然后从第1只开始数#xff0c;数到第m只,把它踢出圈#xff0c;从它后面再开始数#xff0c;再数到第m只#xff0c;在把它踢出去…#xff0c;如此不停的进行下去#xff0c;直到…1、一群猴子排成一圈按12…n依次编号。然后从第1只开始数数到第m只,把它踢出圈从它后面再开始数再数到第m只在把它踢出去…如此不停的进行下去直到最后只剩下一只猴子为止那只猴子就叫做大王。要求编程模拟此过程输入m、n, 输出最后那个大王的编号。function king($n, $m){ $monkeys range(1, $n); //创建1到n数组 $i0; while (count($monkeys)1) { //循环条件为猴子数量大于1 if(($i1)%$m0) { //$i为数组下标;$i1为猴子标号 unset($monkeys[$i]); //余数等于0表示正好第m个删除用unset删除保持下标关系 } else { array_push($monkeys,$monkeys[$i]); //如果余数不等于0则把数组下标为$i的放最后形成一个圆形结构 unset($monkeys[$i]); } $i;//$i 循环1不断把猴子删除或 push到数组 } return current($monkeys); //猴子数量等于1时输出猴子标号得出猴王}echo king(6,3);2、有一母牛到4岁可生育每年一头所生均是一样的母牛到15岁绝育不再能生20岁死亡问n年后有多少头牛。function niu($y){ static $num 1; //定义静态变量;初始化牛的数量为1 for ($i1; $i $y ; $i) { if($i4 $i15){ //每年递增来算4岁开始115岁不能生育 $num; niu($y-$i); //递归方法计算小牛$num小牛生长年数为$y-$i }else if($i20){ $num--; //20岁死亡减一 } return $num;}3、杨辉三角?php /* 默认输出十行用T(值)的形式可改变输出行数 */class T{ private $num; public function __construct($var10) { if ($var3) die(值太小啦); $this-num$var; } public function display(){ $n$this-num; $arrarray(); //$arrarray_fill(0,$n1,array_fill(0,$n1,0)); $arr[1]array_fill(0,3,0); $arr[1][1]1; echo str_pad( ,$n*12, ); printf(%3d,$arr[1][1]); echo ; for($i2;$i$n;$i){ $arr[$i]array_fill(0,($i2),0); for($j1;$j$i;$j){ if($j1) echo str_pad( ,($n1-$i)*12, ); printf(%3d,$arr[$i][$j]$arr[$i-1][$j-1]$arr[$i-1][$j]); echo ; } echo; } }}$yhnew T(3); //$yhnew T(数量);$yh-display();?4.冒泡排序function maopao($arr){ $len count($arr); for($k0;$k$len;$k) { for($j$len-1;$j$k;$j--){ if($arr[$j]5.快速排序function quickSort($arr) { //先判断是否需要继续进行 $length count($arr); if($length 1) { return $arr; } //选择第一个元素作为基准 $base_num $arr[0]; //遍历除了标尺外的所有元素按照大小关系放入两个数组内 //初始化两个数组 $left_array array(); //小于基准的 $right_array array(); //大于基准的 for($i1; $i $arr[$i]) { //放入左边数组 $left_array[] $arr[$i]; } else { //放入右边 $right_array[] $arr[$i]; } } //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数 $left_array quickSort($left_array); $right_array quickSort($right_array); //合并 return array_merge($left_array, array($base_num), $right_array);}6.二分查找算法(折半查找算法)function binsearch($x,$a){ $ccount($a); $lower0; $high$c-1; while($lower$high){ $middleintval(($lower$high)/2); if($a[$middle]$x){ $high$middle-1; } elseif($a[$middle]7.PHP奇异算法 ?phpfunction test(){ $a1; $b$a; echo ($a)($a);}test();PHP7以下的版本返回的是 6PHP7版本返回5 还真的算奇异个人底层算法差认为是PHP7以下版本的BUG8.字符集合输入一个字符串求出该字符串包含的字符集合并按顺序排序(英文)function set($str){ //转化为数组 $arr str_split($str); //去除重复 $arr array_flip(array_flip($arr)); //排序 sort($arr); //返回字符串 return implode(, $arr);}9.遍历一个文件下的所有文件和子文件夹下的文件function AllFile($dir){ if($dh opendir($dir)){ while (($file readdir($dh)) ! false){ if($file !.. $file !.){ if(is_dir($dir./.$file)){ AllFile($dir./.$file); //如果判断还是文件则递归 }else{ echo $file; //输出文件名 } } } }}10.从一个标准的Url提取出文件的扩展名function getExt($url) { $arr parse_url($url); $file basename($arr[path]);// basename函数返回路径中的文件名部分 $ext explode(., $file); return $ext[count($ext)-1]; }11.有个人想上一个n级的台阶每次只能迈1级或者迈2级台阶问这个人有多少种方法可以把台阶走完例如总共3级台阶可以先迈1级再迈2级或者先迈2级再迈1级或者迈3次1级总共3中方式function jieti($num){ //实际上是斐波那契数列 return $num2?1:jieti($num-1)jieti($num-2);}12.请写一段PHP代码确保多个进程同时写入同一个文件成功?php $fp fopen(lock.txt,w); if (flock($fp,LOCK_EX)) { //获得写锁写数据 fwrite($fp, write something); // 解除锁定 flock($fp, LOCK_UN); } else { echo file is locking...; } fclose($fp);?13.无限级分类function tree($arr,$pid0,$level0){ static $list array(); foreach ($arr as $v) { //如果是顶级分类则将其存到$list中并以此节点为根节点遍历其子节点 if ($v[pid] $pid) { $v[level] $level; $list[] $v; tree($arr,$v[id],$level1); } } return $list;}14.获取上个月第一天 和 最后一天//获取上个月第一天 date(Y-m-01,strtotime(-1 month)); //获取上个月最后一天 date(Y-m-t,strtotime(-1 month));15.随机输入一个数字能查询到对应的数据区间//把区间换成数组写法用二分法查找区间function binsearch($x,$a){ $ccount($a); $lower0; $high$c-1; while($lower$high){ $middleintval(($lower$high)/2); if($a[$middle]$x){ $high$middle-1; }elseif($a[$middle]$x ){ $lower$middle1; } } return 在区间.$a[$high].到.$a[$lower]; }$array [1,50,100,150,200,250,300];$a 120;echo binsearch($a,$array);16现在有一个字符串你要对这个字符串进行 n 次操作每次操作给出两个数字(p, l) 表示当前字符串中从下标为 p 的字符开始的长度为 l 的一个子串。你要将这个子串左右翻转后插在这个子串原来位置的正后方求最后得到的字符串是什么。字符串的下标是从 0 开始的你可以从样例中得到更多信息。每组测试用例仅包含一组数据每组数据第一行为原字符串长度不超过 10 仅包含大小写字符与数字。接下来会有一个数字 n 表示有 n 个操作再接下来有 n 行每行两个整数表示每次操作的(p , l)。保证输入的操作一定合法最后得到的字符串长度不超过 1000。?phpclass TestKeenSting{ private $str; public function __construct($str) { $this-str $str; } public function run($orders) { foreach($orders as $item) { $this-execute($item[0],$item[1]); } return $this-str; } private function execute($pos,$length) { $len strlen($this-str); if(($length-$pos) $len) exit(1); else $tmp_str substr($this-str,$pos,$length); $s1 substr($this-str,0,$pos$length); $s2 substr($this-str,$pos$length); $dest_str $this-str_reverse($tmp_str); $this-str $s1.$dest_str.$s2; } private function str_reverse($str) { $len strlen($str); if($len%2 0) $times $len/2; else $times ($len-1)/2; for($i0;$irun([[0,2],[1,3]]);echo $re;17,你作为一名出道的歌手终于要出自己的第一份专辑了你计划收录 n 首歌而且每首歌的长度都是 s 秒每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪你决定任意一张 CD 内的歌数不能被 13 这个数字整除那么请问你出这张专辑至少需要多少张 CD 每组测试用例仅包含一组数据每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000?phpclass TestKeenSting{ private $song_num; private $song_size; private $cd_size; public function __construct($n,$s,$l) { if($n100 || $s$l) exit(input error!); $this-song_num $n; $this-song_size $s; $this-cd_size $l; } public function run() { $cd_container $this-calculate_single_cd(); return ceil($this-song_num/$cd_container); } private function calculate_single_cd() { //假设一张cd可以放n个 song_length1 $n floor($this-cd_size / ($this-song_size 1)); //对剩余空间做判断 $gap $this-cd_size - $n * ($this-song_size 1); if($gap $this-song_size)//剩余空间是否刚好可以放一首歌 if($n!12)//已经放了12首歌,不要这最后的一首 $n 1; else if($n 13) //如果之前就已经可以放13首,放弃一首 $n 12; return $n; }}$a new TestKeenSting(7,2,6);$re $a-run();echo $re;18 用PHP实现一个双向队列?php class Deque{ private $queuearray(); public function addFirst($item){ return array_unshift($this-queue,$item); } public function addLast($item){ return array_push($this-queue,$item); } public function removeFirst(){ return array_shift($this-queue); } public function removeLast(){ return array_pop($this-queue); }}?19 请使用冒泡排序法对以下一组数据进行排序10 2 36 14 10 25 23 85 99 45。?php // 冒泡排序 function bubble_sort($arr){ for ($i0,$lencount($arr); $i $len; $i) { for ($j1; $j $len-$i; $j) { if ($arr[$j-1] $arr[$j]) { $temp $arr[$j-1]; $arr[$j-1] $arr[$j]; $arr[$j] $temp; } } } } // 测试 $arr array(10,2,36,14,10,25,23,85,99,45); bubble_sort($arr); print_r($arr);?20 写出一种排序算法(要写出代码)并说出优化它的方法。?php //快速排序 function partition($arr,$low,$high){ $pivotkey $arr[$low]; while($low$high){ while($low $high $arr[$high] $pivotkey){ $high--; } $temp $arr[$low]; $arr[$low] $arr[$high]; $arr[$high] $temp; while($low 21 洗牌算法?php $card_num 54;//牌数 function wash_card($card_num){ $cards $tmp array(); for($i 0;$i $card_num;$i){ $tmp[$i] $i; } for($i 0;$i $card_num;$i){ $index rand(0,$card_num-$i-1); $cards[$i] $tmp[$index]; unset($tmp[$index]); $tmp array_values($tmp); } return $cards; } // 测试 print_r(wash_card($card_num));?【程序1】 题目古典问题有一对兔子从出生后第3个月起每个月都生一对兔子小兔子长到第四个月后每个月又生一对兔子假如兔子都不死问每个月的兔子总数为多少 1.程序分析 兔子的规律为数列1,1,2,3,5,8,13,21.... 2 就是第三个数是前两个数字的和,既是经典的菲波那切数列 function actionFblist($n) { // 1,1,2,3,5,8,13 // $n 为第n个月 $arr [1,1]; if($n 【程序2】 题目判断101-200之间有多少个素数并输出所有素数。 1.程序分析判断素数的方法用一个数分别去除2到sqrt(这个数)如果能被整除 则表明此数不是素数反之是素数。 public function actionIsPrimeNumber(){ $arr []; for ($i101;$i200;$i) { $flag true; for ($j 2;$jsqrt($i);$j) { if($i % $j 0) { $flag false; } } if($flag true) $arr[] $i; } var_dump($arr);}【程序3】 题目打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数其各位数字立方和等于该数本身。例如153是一个 水仙花数 因为1531的三次方5的三次方3的三次方。 1.程序分析利用for循环控制100-999个数每个数分解出个位十位百位。 public function actionWaterFlower(){ $re []; for($i 100;$i 999;$i) { $hundred floor($i / 100 ); // 获取百位数字 $ten floor(($i %100 ) / 10 ); // 获取十位数字 $one floor($i % 100 % 10); // 获取各位数字 if((pow($hundred,3) pow($ten,3) pow($one,3) ) $i ) { $re[] $i; } } var_dump($re);}【程序4】 题目利用条件运算符的嵌套来完成此题学习成绩 90分的同学用A表示60-89分之间的用B表示60分以下的用C表示。 1.程序分析(a b)?a:b这是条件运算符的基本例子。public function actionGetScore(){ $score 90; if($score 0 || $score 100) return false; $re $score 90 ? A : ($score 60 ? B :C); var_dump($re);}【程序5】 题目求saaaaaaaaaaaa...a的值其中a是一个数字。例如222222222222222(此时共有5个数相加)几个数相加有键盘控制。 1.程序分析关键是循环获得计算出每一项的值。2. 可以使用php的str_repeat函数 public function actionRepeatN() { $a 8; $n 8; $sum 0; for ($i 0;$i【程序6】题目一个整数它加上100后是一个完全平方数加上168又是一个完全平方数请问该数是多少 1.程序分析在10万以内判断先将该数加上100后再开方再将该数加上268后再开方如果开方后的结果满足如下条件即是结果。请看具体分析 刚开始不知道怎么判断一个数字是否为完全平方数,但是根据php的基本函数sqrt和pow可以间接进行判断若开方后进行取整再平方等于原数字,那么这个数字则为一个完全平方数,根据这个方法进行判断public function actionWhitchNum(){ for ($i1;$i100000;$i) { if(pow((int)sqrt($i100),2) ($i100) pow((int)sqrt($i168),2) ($i168) ) { echo $i; } } echo ok;}【程序7】 题目输入某年某月某日判断这一天是这一年的第几天 1.程序分析以3月5日为例应该先把前两个月的加起来然后再加上5天即本年的第几天特殊情况闰年且输入月份大于3时需考虑多加一天。 刚开始看这题以为有什么简单的方法,但是我没有想到,没有办法,只能用这种方法了public function actionToday(){ $today 2018-03-05; // 格式固定 $days explode(-,$today); $year $days[0]; $month (int)$days[1]; $day (int)$days[2]; // 判断是否为闰年 $flag false; if($year%4000||($year%40$year%100!0)) { $flag true; } // 对月份进行判断 1,3,5,7,8,10,12 为31天 // 4,6,9,11 为30天 // 2月份闰年为29天,否则为28天 switch ($month) { case 1: $sum 0;break; case 2: $sum 31;break; case 3: $sum 59;break; case 4: $sum90;break; case 5: $sum120;break; case 6: $sum151;break; case 7: $sum181;break; case 8: $sum212;break; case 9: $sum243;break; case 10: $sum273;break; case 11: $sum304;break; case 12: $sum334;break; default: break; } $sum $sum $day; if($flag $month2) $sum $sum 1; var_dump($sum);}【程序8】 题目输入三个整数x,y,z请把这三个数由小到大输出。 1.程序分析我们想办法把最小的数放到x上先将x与y进行比较如果x y则将x与y的值进行交换然后再用x与z进行比较如果x z则将x与z的值进行交换这样能使x最小。 这里不把排序当做考察点,排序的话可以使用冒泡,快速,插入等排序算法,这里使用了三种交换变量的方式,我感觉这才是重要的public function actionSortX(){ $x 6; $y 53; $z 6; if($x$y) // $y$z) { $tmp $x; $x $z; $z $tmp; } if($y$z) { $tmp $y . - .$z; $tmp explode(-,$tmp); $y $tmp[1]; $z $tmp[0]; } echo $x,,,$y,,,$z;}【程序9】 题目输出9*9口诀。 1.程序分析分行与列考虑共9行9列i控制行j控制列。 public function actionMultiplicationTable(){ for ($i1;$i9;$i) { for ($j1;$j$i;$j) { echo $j . * .$i . . $i*$j; echo ; } echo ; }}【程序10】 题目有一分数序列2/13/25/38/513/821/13...求出这个数列的前20项之和。 1.程序分析请抓住分子与分母的变化规律。 public function actionAddFraction(){ $sum 0; $numerator [2,3]; $denominator [1,2]; // 根据规律获得所有的分子和分母 for ($i2;$i20;$i) { $numerator[$i] $numerator[$i-2] $numerator[$i-1]; $denominator[$i] $denominator[$i-2] $denominator[$i-1]; } // 获得分数的前n项和 for ($i0;$i20;$i) { $sum $numerator[$i] / $denominator[$i]; } var_dump($sum);}【程序11】 题目求12!3!...20!的和 1.程序分析此程序只是把累加变成了累乘。 public function actionAddFactorial(){ $n 20; $sum 0; for ($i1;$i$n;$i) { $num 1; for ($j1;$j$i;$j) { $num $j*$num; } $sum $num; } var_dump($sum);}【程序12】 题目利用递归方法求5!。 1.程序分析递归公式fnfn_1*4! public function numFactorial($n){ if($n1) return $sum $n * $this-numFactorial($n-1); // 需要注意这点,若是写成函数要替换成函数形式 else return $n;}public function actionNumFactorial(){ $n 4; $sum $this-numFactorial($n); // 调用上面的阶乘方法(函数)}【程序13】 题目有5个人坐在一起问第五个人多少岁他说比第4个人大2岁。问第4个人岁数他说比第3个人大2岁。问第三个人又说比第2人大两岁。问第2个人说比第一个人大两岁。最后问第一个人他说是10岁。请问第五个人多大 1.程序分析利用递归的方法递归分为回推和递推两个阶段。要想知道第五个人岁数需知道第四人的岁数依次类推推到第一人(10岁)再往回推。 public function myAge($n){ if($n 1) return $age 10; else return 2 $this-myAge($n-1);}public function actionMyAge1(){ $n 5; echo $this-myAge($n);}【程序14】 题目给一个不多于5位的正整数要求一、求它是几位数二、逆序打印出各位数字。 public function actionIntLength(){ $num 1232345; $num (string) $num; $length strlen($num); $numstring ; for ($i$length-1;$i0;$i--) { $numstring . $num[$i]; } echo $numstring;}【程序15】 题目一个5位数判断它是不是回文数。即12321是回文数个位与万位相同十位与千位相同。 public function actionIsPalindromeNumber(){ $num 12321; $num (string) $num; if($num[0] $num[4] $num[1] $num[3]) var_dump(Is Palindrome Number); else echo false;}/* * 找到所有的5位的回文数 * */public function actionAllPalindromeNumber(){ $result []; for ($i10000;$i99999;$i) { $i (string) $i; if($i[0] $i[4] $i[1] $i[3]) $result[] $i; } var_dump($result);}