免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 草上飞2008
打印 上一主题 下一主题

大赛评选结果已出,敬请关注!:PHP编程大赛隆重启动,PHP开发大挑战 [复制链接]

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
101 [报告]
发表于 2010-09-23 21:34 |只看该作者
1:要求在一组数中,插入一个新数,并维护原来的排序方式不变
  1. <?php
  2.     function insertArr($arr,$val){
  3.             $pos=0;
  4.             if (sizeof($arr)==0) return array($val); //传入数组没有值
  5.             if (sizeof($arr)==1){ //传入数组个数为1
  6.                     return array($val,$arr[0]);
  7.             }
  8.             $bfind=false;
  9.             if ($arr[0]>$arr[sizeof($arr) - 1]){
  10.                     $bfind=true; //从大到小排序
  11.             }else{
  12.                     $bfind=false;//从小到大排序
  13.             }
  14.             for($i=0;$i<sizeof($arr);$i++){ //找到要插入值应该插入的位置。
  15.                     if ($bfind){
  16.                             if ($arr[$i]<$val){
  17.                                     $pos=$i;
  18.                                     break;
  19.                             }
  20.                     }else{
  21.                             if ($arr[$i]>$val){
  22.                                     $pos=$i;
  23.                                     break;
  24.                             }
  25.                     }
  26.             }
  27.             $left_arr=array();
  28.             $right_arr=array();
  29.             for ($i=0;$i<sizeof($arr);$i++){ //根据要插入的值把数组分左右两部分。
  30.                     if ($i<$pos){
  31.                             $left_arr[]=$arr[$i];
  32.                     }else{
  33.                             $right_arr[]=$arr[$i];
  34.                     }
  35.             }
  36.             return array_merge($left_arr,array($val),$right_arr);
  37.     }
  38.     //测试
  39.     $arr=array();
  40.     print_r(insertArr($arr,10));echo "<br>";
  41.     $arr=array(1);
  42.     print_r(insertArr($arr,10));echo "<br>";
  43.     $arr=array(1,3,8,12,13,15);
  44.     print_r(insertArr($arr,10));echo "<br>";
  45.     $arr=array(31,23,18,12,11,1);
  46.     print_r(insertArr($arr,10));echo "<br>";
  47. ?>
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
102 [报告]
发表于 2010-09-23 22:14 |只看该作者
33、写一个函数,算出两个文件的相对路径
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
  1. <?php
  2. $a = '/c/d/d/e.php';
  3. $b = '/a/c/d/e.php';
  4. $aArr = explode('/',dirname($a));
  5. $bArr = explode('/',dirname($b));
  6. $aLen = count($aArr);
  7. $bLen = count($bArr);
  8. $maxLen = max($aLen,$bLen);
  9. for($i = 1; $i < $maxLen; $i++){
  10.     if($aArr[$i] != $bArr[$i] && isset($aArr[$i])){
  11.         if(isset($bArr[$i]))$bUrl[]=$bArr[$i];
  12.         $relativePath .= "../";
  13.     }else{
  14.         $bUrl[]=$bArr[$i];
  15.     }
  16. }
  17. echo $relativePath.implode('/',$bUrl).'/'.basename($b);
  18. ?>
复制代码

论坛徽章:
0
103 [报告]
发表于 2010-09-23 22:42 |只看该作者
本帖最后由 ypyouyp 于 2010-09-23 22:58 编辑

//第14题 小球的路径长度

  1. <?php
  2. $route = ball_route(10);
  3. print_r("小球的总路径长度为:".$route);

  4. function ball_route($height) {
  5.         $route = 0;
  6.         $flag = 10/1000;//原高度的前分之一
  7.         while($height > $flag) {
  8.                 $route = $height + $height * 0.7 + $route;
  9.                 $height = $height * 0.7;
  10.                 //print_r($route."----".$height."<br />");
  11.         }
  12.         return $route;
  13. }
  14. ?>
复制代码
//第21题 创建多极目录

  1. <?php
  2. create_folder("php/asp/jsp");
  3. function createFolder($path) {
  4.         create_folder(dirname($path));
  5.         mkdir($path, 0777);
  6. }
  7. ?>
复制代码
//第24题 求三个数中的最大值

  1. <?php
  2. print_r("<br />假设三个数分别为5, 28, 11 <br />");
  3. $value = get_max_num(5, 28, 11);
  4. print_r("三个数中的最大值是 :");
  5. print_r($value);
  6. function get_max_num($a, $b, $c) {
  7.         $max = $a > $b ? $a : $b;//返回$a,$b中较大的
  8.         return $c > $max ? $c : $max;//返回最大值
  9. }
  10. ?>
复制代码

论坛徽章:
0
104 [报告]
发表于 2010-09-23 22:51 |只看该作者
本帖最后由 ypyouyp 于 2010-09-23 22:53 编辑

//第10题 桃子最少有多少个-----3124
  1. <?php
  2. $sum = monkey_eat_peach(1, 5);
  3. print_r("<br />桃子总数至少为 : $sum");
  4. function monkey_eat_peach($base_peach, $times) {
  5.         //假设经过5次分桃后,每个猴子可以分到一个桃
  6.         $sum = $base_peach;//每个猴子分$times次,每次分的桃子数 $base_peach
  7.         for ($i = 0; $i < $times; ++$i) {
  8.                 $sum = ($sum * 5 + 1) / 4 ;
  9.         }
  10.         //如果出现分数,就将第五次分后每个猴子分到的桃子数 加一
  11.         if(strpos($sum, ".")) {
  12.                 return monkey_eat_peach($base_peach + 1, $times);
  13.         } else {
  14.                 return $sum;
  15.         }
  16. }


  17. ?>
复制代码
//第12题 猴子吃枣的问题
  1. <?php
  2. $sum = monkey_eat_jujube(10);
  3. print_r("<br />枣子的总数为:");
  4. print_r($sum);
  5. function monkey_eat_jujube($day) {
  6.         $sum = 1;
  7.         for($i = $day-1; $i > 0; --$i) {
  8.                 $sum = ($sum+1) *2;
  9.         }
  10.         return $sum;
  11. }

  12. ?>
复制代码

论坛徽章:
0
105 [报告]
发表于 2010-09-24 01:03 |只看该作者
4:使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组
  1. <?php
  2. $a = array(2, 5, 3, 19, 15, 7, 18, 15, 33, 5);
  3. print_r("原数组为: <br />");
  4. print_r($a);
  5. print_r("<br />冒泡排序输出结果:<br />");
  6. print_r(bubble_sort($a));
  7. print_r("<br />快速排序输出结果:<br />");
  8. $m = quick_sort($a);
  9. print_r($m);
  10. function bubble_sort($a) {
  11.         $num = count($a);//获取数组的最大下标边界
  12.         //遍历 $num 次,每次获取一个最大值
  13.         for($i = 0; $i < $num; ++$i) {
  14.                 //第$i次遍历,获得第 $num-$i-1 的值(在0--$num-$i-1 中最大)
  15.                 for($j = 1; $j < $num-$i; ++$j) {
  16.                         //如果靠前为位置的值较靠后的相邻的值大,进行交换,依次类推
  17.                         if($a[$j-1] > $a[$j]) {
  18.                                 $tmp = $a[$j-1];
  19.                                 $a[$j-1] = $a[$j];
  20.                                 $a[$j] = $tmp;#
  21.                         }
  22.                 }
  23.         }
  24.         return $a;
  25. }

  26. function quick_sort($a) {
  27.         $len = count($a);
  28.         //如果数组只有一个元素,返回该数组
  29.         if($len == 1) return $a;
  30.         //如果数组中每个元素都相同, 返回该数组
  31.         for($i = 0; $i < $len; ++$i) {
  32.                 if($a[0] == $a[$i]) {
  33.                         if($i == $len-1) return $a;
  34.                 } else {
  35.                         break;
  36.                 }
  37.         }
  38.         //获取合适的$key(取数组的中间值)
  39.         $key = get_key($a, $len);
  40.         $j = 0;
  41.         $k = 0;
  42.         $front = array();
  43.         $back = array();
  44.         //依照key,将数组分为小于等于$key和大于$key两组
  45.         for($i = 0; $i < $len; ++$i) {
  46.                 if($a[$i] <= $key) {
  47.                         $front[$j] = $a[$i];
  48.                         ++$j;
  49.                 } else
  50.                 if($a[$i] > $key) {
  51.                         $back[$k] = $a[$i];
  52.                         ++$k;
  53.                 }
  54.         }
  55.         //对两个数组进行快速排序
  56.         $m = quick_sort($front);
  57.         $n = quick_sort($back);
  58.         //合并派好序的$key
  59.         return array_merge($m, $n);
  60. }
  61. //在一个数组中寻找大概的中间值,
  62. function get_key($a, $len) {
  63.         $min = $a[0];
  64.         $max = $a[0];
  65.         for($i=0; $i < $len; ++$i) {
  66.                 if($a[$i] > $max) {
  67.                         $max = $a[$i];
  68.                 }
  69.                 if($a[$i] < $min) {
  70.                         $min = $a[$i];
  71.                 }
  72.         }
  73.         //取数组的最大最小值的平均值
  74.         $mid = intval(($max+$min)/2);
  75.         return $mid;
  76. }


  77. ?>
复制代码

论坛徽章:
0
106 [报告]
发表于 2010-09-24 14:33 |只看该作者
1:要求在一组数中,插入一个新数,并维护原来的排序方式不变
  1. /*
  2.   1. Append item to array
  3.   2. Check array order and use respective sort function to put item into right position
  4. */
  5. function insertItem(array $array, $item)
  6. {
  7.     $array[] = $item;

  8.     $totalItems = count($array);

  9.     if ($totalItems > 1) {
  10.         if ($array[0] <= $array[$totalItems-2]) {
  11.             sort($array);
  12.         } else {
  13.             rsort($array);
  14.         }
  15.     }

  16.     return $array;
  17. }
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
107 [报告]
发表于 2010-09-24 15:59 |只看该作者
回复 106# dz902


    php关于数组sort函数和rsort函数,还从来没有用过。所以我写的方法就太笨措了。呵呵。

论坛徽章:
0
108 [报告]
发表于 2010-09-26 12:04 |只看该作者
renxiao2003 很活跃呀,支持你,努力吧

论坛徽章:
5
CU十周年纪念徽章
日期:2012-02-28 22:08:51CU大牛徽章
日期:2012-02-28 22:08:512010年中国数据库技术大会
日期:2012-02-28 22:05:302009年中国系统架构师大会
日期:2012-02-28 22:05:30ChinaUnix元老
日期:2012-02-28 22:26:02
109 [报告]
发表于 2010-09-27 11:27 |只看该作者
renxiao2003 很活跃呀,支持你,努力吧
surpass_li 发表于 2010-09-26 12:04



    严重顶啊, 头等奖,非你莫属了,呵呵

论坛徽章:
0
110 [报告]
发表于 2010-09-27 11:54 |只看该作者
回复 3# renxiao2003


    in.txt,out.txt呢


十一回家做题去
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP