免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
141 [报告]
发表于 2010-10-01 13:07 |只看该作者
有点无聊,俺也来做题吧{:3_188:}

论坛徽章:
0
142 [报告]
发表于 2010-10-01 15:05 |只看该作者
本帖最后由 starzhestarzhe 于 2010-10-02 16:59 编辑

一.在一组数中,插入一个新数,并维护原来的排序方式不变
  1. /**
  2. * 在一组数中,插入一个新数,并维护原来的排序方式不变
  3. * @param array $array
  4. * @param unknown_type $val
  5. */
  6. function pushByOrder(array $array,$val) {
  7.         if(count($array) == 0) {  //一个空数组
  8.                 return array($val);
  9.         }
  10.         elseif(count($array) == 1) { //数组只一个元素
  11.                 $array[] = $val;
  12.                 return $array;
  13.         }
  14.         $asc = null; //排序方式
  15.         $end = end($array); //获取数组最后一个元素
  16.         $start = reset($array);  //重置数组内部指针并获取第一个元素值
  17.         if($start < $end) {
  18.                 $asc = true;
  19.         }
  20.         elseif($start > $end) {
  21.                 $asc = false;
  22.         }
  23.         else {
  24.                 $array[] = $val;
  25.                 return $array;
  26.         }
  27.         $return = array();
  28.         $insert = false; //是否已经插入的标记
  29.         foreach ($array AS $value) {  //$array循环一次
  30.                 if($insert === false) {
  31.                         if($asc) {
  32.                                 if($value > $val){
  33.                                         $insert = true;
  34.                                 }
  35.                         }
  36.                         else {
  37.                                 if($value < $val){
  38.                                         $insert = true;
  39.                                 }
  40.                         }
  41.                         if($insert === true) {
  42.                                 $return[] = $val;
  43.                         }
  44.                 }
  45.                 $return[] = $value;
  46.         }
  47.         if($insert === false) $return[] = $val; //放到最后
  48.         return $return;
  49. }
  50. $array = array(
  51. 'stop'=>9,
  52. 0=>7,
  53. 'class'=>2,
  54. 2=>1,
  55. 'dygod'=>0,
  56. '1'=>-5
  57. );
  58. print_r($array);
  59. $array = pushByOrder($array,-9);
  60. print_r($array);
  61. //输出
  62. Array
  63. (
  64.     [stop] => 9
  65.     [0] => 7
  66.     [class] => 2
  67.     [2] => 1
  68.     [dygod] => 0
  69.     [1] => -5
  70. )
  71. Array
  72. (
  73.     [0] => 9
  74.     [1] => 7
  75.     [2] => 2
  76.     [3] => 1
  77.     [4] => 0
  78.     [5] => -5
  79.     [6] => -9
  80. )
复制代码
二. 二分法查找
  1. /**
  2. * 二分法查找
  3. * @param $array 在数组$array里查找
  4. * @param $value  要查找的值
  5. * @param $low 查找起始位置
  6. * @param $high 查找结束位置
  7. */
  8. function binSearch(array &$array,$value,$low,$high) {
  9.         if($low<=$high) {
  10.                 $mid=intval(($low+$high)/2);
  11.                 if($array[$mid] == $value) {
  12.                         return $mid;//返回位置
  13.                 }
  14.                 elseif($array[$mid] > $value) {
  15.                         return binSearch($array,$value,$low,$mid-1); //递归查找
  16.                 }
  17.                 else {
  18.                         return binSearch($array,$value,$mid+1,$high);
  19.                 }
  20.         }
  21.         return -1;//查找不到返回-1
  22. }
  23. $array = array(0,2,3,5,6,9);

  24. echo binSearch($array,9,0,count($array)-1);
  25. 输出:5
复制代码
三.打印一个杨辉三角
  1. /**
  2. * 杨辉三角形
  3. * @param $num 行数
  4. */

  5. function echoTriangle($num) {
  6.         $oldArray = array(0=>1);
  7.         $newArray = array();
  8.         for($i=0;$i<$num;++$i) {
  9.                 $newArray && $oldArray = $newArray;
  10.                 $newArray = array();//重置$newArray;
  11.                 for($j=0;$j<=$i;++$j) {
  12.                         $newArray[$j] = (isset($oldArray[$j-1])?$oldArray[$j-1]:0)+(isset($oldArray[$j])?$oldArray[$j]:0);
  13.                         echo $newArray[$j],"\t";
  14.                 }
  15.                 echo "\n";
  16.         }
  17. }

  18. echoTriangle(6);

  19. //输出
  20. 1       
  21. 1        1       
  22. 1        2        1       
  23. 1        3        3        1       
  24. 1        4        6        4        1       
  25. 1        5        10        10        5        1               
复制代码
四.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

  1. /**
  2. * 冒泡排序ASC
  3. * @param 排序数组
  4. */
  5. function bubbleSort(array &$array) {
  6.         if(!($count = count($array))) return;
  7.         for ($i=$count-1;$i>0;--$i) {
  8.                 for ($j=0;$j<$i;++$j) {
  9.                         if($array[$j]>$array[$j+1]) {
  10.                                 $temp = $array[$j];
  11.                                 $array[$j] = $array[$j+1];
  12.                                 $array[$j+1] = $temp;
  13.                         }
  14.                 }
  15.         }
  16. }

  17. $array = array(3,35,6,3246,66,26,236326,6);
  18. bubbleSort($array);
  19. print_r($array);
  20. //输出
  21. Array
  22. (
  23.     [0] => 3
  24.     [1] => 6
  25.     [2] => 6
  26.     [3] => 26
  27.     [4] => 35
  28.     [5] => 66
  29.     [6] => 3246
  30.     [7] => 236326
  31. )
复制代码
五.写一个二维数组排序函数,能够具有通用性

  1. /**
  2. * 二维数组按照某个键值做ASC排序
  3. * @param $array 排序数组
  4. * @param $sortKey 排序键值
  5. */
  6. function DsortArray(array $array,$sortKey) {
  7.         $keyMap = $return = array();
  8.         foreach ($array AS $key=>$data) {
  9.                 $keyMap[$key] = $data[$sortKey];
  10.         }
  11.         asort($keyMap);
  12.         foreach($keyMap as $key=>$value){
  13.         $return[] = $array[$key];
  14.     }
  15.     return $return;
  16. }

  17. $array = array(
  18. array('sort'=>12,'name'=>14),
  19. array('sort'=>3,'name'=>14),
  20. array('sort'=>5,'name'=>14),
  21. array('sort'=>1,'name'=>14),
  22. array('sort'=>7,'name'=>14),
  23. );
  24. $array = DsortArray($array,'sort');
  25. print_r($array);
  26. //输出
  27. Array
  28. (
  29.     [0] => Array
  30.         (
  31.             [sort] => 1
  32.             [name] => 14
  33.         )

  34.     [1] => Array
  35.         (
  36.             [sort] => 3
  37.             [name] => 14
  38.         )

  39.     [2] => Array
  40.         (
  41.             [sort] => 5
  42.             [name] => 14
  43.         )

  44.     [3] => Array
  45.         (
  46.             [sort] => 7
  47.             [name] => 14
  48.         )

  49.     [4] => Array
  50.         (
  51.             [sort] => 12
  52.             [name] => 14
  53.         )

  54. )
复制代码
六.写一个function实现数组内每个元素之间加法的递代运算?

  1. /**
  2. * 数组内每个元素之间加法的递代运算
  3. * @param array $array 运算数组
  4. */
  5. function eachAddInArray(array $array) {
  6.         $return = $keyArray = array();
  7.         $keyArray = array_keys($array);//储存所有key值
  8.         reset($array);
  9.         $i = 0;
  10.         while (($current=current($array)) !== false) {       
  11.                 foreach ($keyArray AS $key) {
  12.                         $return[$i][] = $current+$array[$key];
  13.                 }
  14.                 array_shift($keyArray); //在key数组中删除已经计算过的key
  15.                 next($array);
  16.                 ++$i;
  17.         }
  18.         return $return;
  19. }

  20. $array = array(1,'s'=>2,'g'=>3);
  21. $array = eachAddInArray($array);
  22. print_r($array);
  23. 输出:
  24. Array
  25. (
  26.     [0] => Array
  27.         (
  28.             [0] => 2
  29.             [1] => 3
  30.             [2] => 4
  31.         )

  32.     [1] => Array
  33.         (
  34.             [0] => 4
  35.             [1] => 5
  36.         )

  37.     [2] => Array
  38.         (
  39.             [0] => 6
  40.         )
  41. )
复制代码
七.设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。
  1. /**
  2. * 设有n 种物品,每种物品有一个重量及一个价值。
  3. * 但每种物品的数量是无限的,同时有一个背包,最大载重量为M,
  4. * 从n 种物品中选取若干件(同一种物品可以多次选取),
  5. * 使其重量的和小于等于M,而价值的和为最大
  6. * @param $weights 物品重量数组
  7. * @param $values 物品价值数组
  8. * @param $weight 包能承受的最大重量
  9. */
  10. function optimalValue(array $weights,array $values,$weight) {
  11.         $valueStore = array_fill(1,$weight,0); //价值总量数组,从0-weight初始化为0
  12.         for($i=0;$i<count($weights);++$i) { //完全背包问题解决算法
  13.                 for($j=$weights[$i];$j<=$weight;++$j) {
  14.                         if($valueStore[$j]<$valueStore[$j-$weights[$i]]+$values[$i]) {
  15.                     $valueStore[$j] = $valueStore[$j-$weights[$i]]+$values[$i];
  16.                         }
  17.                 }
  18.         }
  19.         return $valueStore[$weight]!==0?$valueStore[$weight]:'can\'t get';
  20. }
  21. $weight = array(1,2,3,4);
  22. $value = array(5,7,9,10);
  23. $return = optimalValue($weight,$value,4);
  24. echo 'Maximum value:',$return;

  25. 输出:
  26. Maximum value:20
复制代码
九.一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩
  1. /**
  2. * 让售货员用最少的硬币个数找给小孩的算法
  3. * @param $money
  4. * @return 以美分为key数量为value的数组返回
  5. */
  6. function giveCents($money) {
  7.         $m = array(25,10,1,5);
  8.         $give = 100 - $money;
  9.         rsort($m);//所有美分从大到小排序
  10.         $return = array();
  11.        
  12.         foreach ($m AS $v) {
  13.                 $return[$v] = floor($give/$v);
  14.                 if($return[$v] > 0) {
  15.                         $give = $give%$v;
  16.                 }
  17.                 if($give<=0) break;
  18.         }
  19.         return $return;
  20. }

  21. $money = 23;
  22. $return = giveCents($money);
  23. print_r($return);
  24. 输出:
  25. Array
  26. (
  27.     [25] => 3
  28.     [10] => 0
  29.     [5] => 0
  30.     [1] => 2
  31. )
复制代码
十一.公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目。
  1. /**
  2. * 公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目
  3. */
  4. function echoChicken() {
  5.         $chicken=100;
  6.         $mNum = floor(100/3);
  7.         $wNum = floor(100/5);
  8.         $cNum = 300;
  9.         $total = $m = 0;
  10.         for ($i=1;$i<$mNum;++$i){
  11.                 for ($j=1;$j<$wNum;++$j){
  12.                     for ($k=1;$k<$cNum;++$k){
  13.                         $m = 3*$i+5*$j+$k/3;
  14.                     $total = $i+$j+$k;
  15.                     if ($m == 100 &&$total == $chicken){ //根据数量和money
  16.                             echo '公鸡:',$i,"\n",'母鸡:',$j,"\n",'小鸡:',$k,"\n";      
  17.                     }
  18.                 }
  19.             }
  20.         }
  21. }
  22. echoChicken();
  23. //输出:
  24. 公鸡:4
  25. 母鸡:12
  26. 小鸡:84
  27. 公鸡:11
  28. 母鸡:8
  29. 小鸡:81
  30. 公鸡:18
  31. 母鸡:4
  32. 小鸡:78
复制代码
十二.小猴第一天摘下若干枣子,当即吃掉了一半,不过瘾又多吃了一个;第二天吃了剩下的一半又多吃了一个;以后每一天都吃了前一天剩下的一半多一个。到第十天小猴再想吃时,见到只剩下一只枣子了。问第一天这堆枣子有多少?
  1. /**
  2. * 第一天这堆枣子有多少
  3. */
  4. function calDates($n) {
  5.         if($n<10) {
  6.                 return 2*(calDates($n+1)+1); //递归式
  7.         }
  8.         return 1;
  9. }

  10. echo "第一天有",calDates(1),"个\n";

  11. //输出:
  12. 第一天有1534个
复制代码
十五. JS下有一个字符串var str = '1|2|3|4|5|6#1|2|3|4#1|2|3|4|5|6|7|8'; 请用“#”号将其分割为数组,再用“|”将其分割为2维数组。可以用例如ary[0][0]这样的各式取出数组中的每个元素。最后输出其中最长数组的编号(1,2,3这样的自然数),这个数组中元素的个数。以及大数组中每个元素
  1. <script type="text/javascript">
  2. var str = '1|2|3|4|5|6#1|2|3|4#1|2|3|4|5|6|7|8';
  3. var array = str.split('#');
  4. var returnArray = new Array();
  5. for(var i=0;i<array.length;++i) {
  6.         var newArray = array[i].split('|');
  7.         returnArray[i] = newArray;
  8. }

  9. var most = 0;
  10. var mosti = 0;
  11. var key = null;
  12. var html = null;
  13. for(var i=0;i<returnArray.length;++i) {
  14.         if(returnArray[i].length > most) {
  15.                 most = returnArray[i].lenght;
  16.                 mosti = i+1;
  17.         }
  18. }
  19. html = '最长的数组编号为:'+mosti+"\n";
  20. html+='长度为:'+most+"\n";
  21. for(key in returnArray[mosti-1]) {
  22.         html+=returnArray[mosti-1][key]+',';
  23. }
  24. document.write(html);
  25. </script>

  26. //输出:
  27. 最长的数组编号为:3
  28. 长度为:8
  29. 1,2,3,4,5,6,7,8,
复制代码
十六.假设数据库中有两个表table1和table2,(太那什么了,过...){:3_196:}

十七.有一个数组array('a','b','c','d','e','f'),请使用两段代码分别达成图1和图2中的效果。
  1. /**
  2. * 第一种
  3. * @param $array
  4. */
  5. function result1($array) {
  6.         $array1 = $array2 = $arrayTemp = array();
  7.         $end = end($array);
  8.         $start = true;
  9.         while(($current = current($array)) !== false) {//逆向循环数组
  10.                 if($start) {
  11.                         $start = false;
  12.                         $arrayTemp[prev($array)] = $end;
  13.                 }
  14.                 elseif(($pre = prev($array)) !== false) {
  15.                         $array1 = $arrayTemp;
  16.                         $arrayTemp = array();//清空$arrayTemp
  17.                         $arrayTemp[$pre] = $array1;
  18.                 }
  19.         }
  20.         print_r($arrayTemp); //输出array1;
  21. }
  22. /**
  23. * 第二种
  24. * @param $array
  25. */
  26. function result2($array) {
  27.         $array1 = $array2 = $arrayTemp = array();
  28.         $end = end($array);
  29.         $start = true;
  30.         while(($current = current($array)) !== false) {//逆向循环数组
  31.                 if($start) {
  32.                         $start = false;
  33.                         $arrayTemp[prev($array)] = array($end=>'Value');
  34.                 }
  35.                 elseif(($pre = prev($array)) !== false) {
  36.                         $array1 = $arrayTemp;
  37.                         $arrayTemp = array();//清空$arrayTemp
  38.                         $arrayTemp[$pre] = $array1;
  39.                 }
  40.         }
  41.         print_r($arrayTemp); //输出array1;
  42. }
  43. $array = array('a','b','c','d','e','f');
  44. result1($array);
  45. result2($array);

  46. //输出:
  47. Array
  48. (
  49.     [a] => Array
  50.         (
  51.             [b] => Array
  52.                 (
  53.                     [c] => Array
  54.                         (
  55.                             [d] => Array
  56.                                 (
  57.                                     [e] => f
  58.                                 )
  59.                         )
  60.                 )
  61.         )
  62. )
  63. Array
  64. (
  65.     [a] => Array
  66.         (
  67.             [b] => Array
  68.                 (
  69.                     [c] => Array
  70.                         (
  71.                             [d] => Array
  72.                                 (
  73.                                     [e] => Array
  74.                                         (
  75.                                             [f] => Value
  76.                                         )
  77.                                 )
  78.                         )
  79.                 )
  80.         )
  81. )
复制代码
十八.请使用一句话将类似“1910-09-09”的日期各式转换为“一九一零年九月九日”这样的各式
  1. $date = '1910-09-09';
  2. echo str_replace(
  3. array(0,1,2,3,4,5,6,7,8,9),
  4. array('零','一','二','三','四','五','六','七','八','九'),
  5. date('Y年n月j日',strtotime($date))
  6. );

  7. //输出:
  8. 一九一零年九月九日
复制代码
二十.简述如何得到当前执行脚本路径,包括所得到参数。
  1. function getScriptAndArg() {
  2.         $return = $_SERVER['SCRIPT_FILENAME'];
  3.         $q = false;
  4.         if($_SERVER['QUERY_STRING']) {
  5.                 $q = true;
  6.                 $return.='?'.$_SERVER['QUERY_STRING'];
  7.         }
  8.         if($_POST) {
  9.                 $return = $q?($return.'&'):($return.'?');
  10.                 $return.= implode('&',$_POST);
  11.         }
  12.         return $return;
  13. }

  14. echo getScriptAndArg();
复制代码
二十一.写出一个能创建多级目录的PHP函数
  1. function mkRDir($dir) {
  2.         if(!is_dir($dir)) {
  3.                 mkRDir(dirname($dir));
  4.                 mkdir($dir, 0777);
  5.         }
  6. }

  7. $dir='/var/www/starzhe.com/tt/dd/cc/rr';
  8. mkRDir($dir);
复制代码
二十二.有一个留言板,用mysql做数据库,用户信息包括:用户名,密码,email,留言内容包括:留言ID,标题,内容,发表时间,状态(审核,未审核),请实现下列需求
  1. 用户表:(user)
  2. id        用户id        int(11)        主键
  3. name        姓名        varchar(30)        唯一索引
  4. password 密码        char(32)       
  5. email        邮箱        varchar(30)        唯一索引

  6. 留言表: (book)
  7. id        留言id        int(11)        主键
  8. user_id        留言用户id        int(11)        普通索引
  9. subject        标题        varchar(100)
  10. status 状态        tinyint(1)        普通索引
  11. time        发表时间        int(11)        普通索引

  12. 留言内容表: (book_detail)
  13. book_id        留言id        int(11) 主键
  14. content 留言内容 test

  15. SELECT u.name,COUNT(b.id) AS book_count FROM user AS u LEFT JOIN book AS b ON(b.user_id=u.id) GROUP BY b.user_id HAVING COUNT(b.id)>10 ORDER BY book_count DESC
复制代码
二十三.写出php的public、protected、private三种访问控制模式的区别
  1. 声明为public的属性或方法可以在任何地方访问和调用
  2. 声明为private的属性或方法只能在该类的内部访问和调用
  3. 声明为protected的属性或方法只能在该类的内部和该类的继承类内部访问和调用
复制代码
二十四. 给你三个数,写程序求出其最大值
  1. function getMaxNumber($a,$b,$c) {
  2.         return (($a = ($a<$b)?$b:$a)<$c)?$c:$a;
  3. }

  4. echo getMaxNumber(9,2,4);
  5. //输出:
  6. 9
复制代码
二十五.写出查询发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
  1. SELECT username FROM `members` ORDER BY `posts` DESC LIMIT 10
复制代码
二十七.有一数组 $a=array(4,3,8,9,2);请将其重新排序(按从小到大的顺序列出)。
  1. $array = array(4,3,8,9,2);
  2. sort($array);
  3. print_r($array);

  4. //输出
  5. Array
  6. (
  7.     [0] => 2
  8.     [1] => 3
  9.     [2] => 4
  10.     [3] => 8
  11.     [4] => 9
  12. )
复制代码
二十八.写出匹配邮箱地址和URL的两个正则表达式。类似下面的:
邮箱地址:user_name.first@hztraining.com
URL地址:http://www.hztraining.com/user_profile.php?uid=100
  1. $urlRe = '/^(?:http|https):\/\/\w[\w-]*(?:\.[\w-]+)*(?:\/[\w-\.]*)*(?:\?(?:[\w-]+=[\w-]+&?)*)*/';
  2. $emailRe = '/^\w[\w-\.]*@(?:[^@]+)$/';
复制代码
二十九.对于大流量的网站,您采用什么样的方法来解决访问量问题
  1. //增加硬件投入
  2. //页面静态化
  3. //优化缓存
  4. //数据库优化
  5. //代码优化
复制代码
三十.MySQL数据库,一天一万条以上的增量,怎么优化
  1. //存储引擎优化,对于日志表这种写多读少的需要特点,采用innodb引擎,对于读频率远大于写的采用myisam引擎
  2. //优化索引
  3. //采取合适的分库分表策略
  4. //分离冷热数据
复制代码
三十一.写个函数来解决多线程同时读写一个文件的问题。

  1. //C/C++实现的话用读写锁
  2. //PS:PHP不支持线程多
  3. //要实现的话:
  4. //程序运行生成一个锁标志的文件,读写时判断是否存在,存在退出, 不存在继续执行, 并生成一个锁文件, 程序结束删除此锁文件
复制代码
三十三.写一个函数,算出两个文件的相对路径
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
  1. function getRelativePath($path1,$path2) {
  2.         $p1 = explode('/',$path1);
  3.         $p2 = explode('/',$path2);
  4.         $path = null;
  5.         $count1 = count($p1);
  6.         $count2 = count($p2);
  7.         foreach ($p2 AS $key=>$value) {
  8.                 if($p1[$key] !== $p2[$key]) { //查找路径不同的开始位置
  9.                         break;
  10.                 }
  11.         }
  12.         $path = str_repeat('../',$count2-$key-1); //获得从不同开始处到文件2深度
  13.         $i = $key;
  14.         while(1) { //从不同开始处到文件1目录
  15.                 $path.=$p1[$i];
  16.                 ++$i;
  17.                 if($i == $count1-1) break;
  18.                 $path.='/';
  19.         }
  20.         return $path;
  21. }
  22. $path1 = '/a/b/c/d/e.php';
  23. $path2 = '/a/b/12/34/c.php';
  24. echo getRelativePath($path1,$path2);

  25. //输出:
  26. ../../c/d
复制代码

论坛徽章:
0
143 [报告]
发表于 2010-10-01 16:32 |只看该作者
  1. /*
  2. 1:要求在一组数中,插入一个新数,并维护原来的排序方式不变
  3. */

  4. $arr = array('a', 'b', 'c', 'd', 'e');
  5. //$arr = array();
  6. insertArray($arr, 'a');
  7. insertArray($arr, 'c');
  8. insertArray($arr, 'f');
  9. function insertArray(&$arr, $item)
  10. {
  11.         if(count($arr) < 2)
  12.         {
  13.                 array_push($arr, $item);
  14.         }
  15.         else
  16.         {
  17.                 array_push($arr, $item);
  18.                 $arr[0] < $arr[1] ? asort($arr) : arsort($arr);
  19.         }
  20. }//End insertArray
  21. echo '<pre>';print_r($arr);echo '</pre>';
复制代码

论坛徽章:
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
144 [报告]
发表于 2010-10-01 23:06 |只看该作者
回复 125# fansekey


    谢谢啊。有些函数我没有用过。谢谢指教。

论坛徽章:
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
145 [报告]
发表于 2010-10-01 23:07 |只看该作者
回复 110# starzhestarzhe


    有些不一定非得in、out吧。

论坛徽章:
0
146 [报告]
发表于 2010-10-01 23:10 |只看该作者
    有些不一定非得in、out吧。
renxiao2003 发表于 2010-10-01 23:07



    嘿嘿,我不知道,现在正做呢,我的也没有

论坛徽章:
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
147 [报告]
发表于 2010-10-01 23:13 |只看该作者
回复 146# starzhestarzhe


    最近这几天都没有答题。明天开始再做。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
148 [报告]
发表于 2010-10-02 01:07 |只看该作者
这些题目,做了许多道,只有一道是值得发上来露露脸的:

//18.  日期格式转换
$str='1910-10-01';
echo str_replace(array_merge(array('-0','-10','-20','-30','-1','-2','-3'),range(0,9)),Array('','十','二十','三十','十','二十','三十','零','一','二','三','四','五','六','七','八','九'),date('Y年-m月-d日',strtotime($str)));

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
149 [报告]
发表于 2010-10-02 01:36 |只看该作者
本帖最后由 hq8318 于 2010-10-03 19:00 编辑

还是按顺序贴题吧,方便大家,也方便自己。(与另一BBS提交的类同,因为是同一人呀)

//1. 插入一个新数
function insertNum($arr,$insertN){
    $i=count($arr)-1;
        if($arr[0]<$arr[1]) $sort=1;    //升序
    else              $sort=0;       //降序
   
    //插入数的大小在数组之外
    if(($sort && $insertN>=$arr[$i]) or (!$sort && $insertN<=$arr[$i]))
         return array_merge($arr,array($insertN));
    if(($sort && $insertN<=$arr[0]) or (!$sort && $insertN<=$arr[0]))   
         return array_merge(array($insertN),$arr);
   
    foreach($arr as $i=>$v){
        if($sort && $arr[$i]>=$insertN)        
           return array_merge(array_slice($arr, 0,$i, true),array($insertN),array_slice($arr, $i,count($arr)-$insertPos,true));      
        if(!$sort && $arr[$i]<=$insertN)        
           return array_merge(array_slice($arr, 0,$i, true),array($insertN),array_slice($arr, $i,count($arr)-$insertPos,true));
    }
}

$arr=range(15,10);
print_r(insertNum($arr,21));
/*
//2. 二分法查元素,假设为升序,返回位置,无返回-1
function dichotomy($arr,$a)   
{   
    if(!isset($a) or !isset($arr))   
    {   
        echo 'Please check inputs.';
        return;
    }
    $start = 0;   
    $end = count($arr)-1;
    while($start <= $end) {   
       $step = intval(($start+$end)/2);   
       if($a == $arr[$step])   return $step;
      
       if($a > $arr[$step])  $start = $step+1;   
       else         $end = $step-1;   
    }   
    return -1;     
}
$arr=array('1','2','3','4','5','6','a');
echo dichotomy(range(-1,10),11);
echo dichotomy($arr,'a');
*/
//3. 打印杨辉三角
/*function yanghui($line)
{
    echo "<table>";
    for($i=1;$i<=$line;$i++)
    {
        echo "<tr>";
        for($j=1;$j<=$i;$j++)
        {
            $yh[$i][1]=1;
            if ($i==$j) $yh[$i][$j]=1;
            else $yh[$i][$j]=$yh[$i-1][$j-1]+$yh[$i-1][$j];
            echo "<td width=40>";
            echo $yh[$i][$j];
            echo "</td>";
        }
        echo "</tr>";
    }
    echo "</table>";
}
yanghui(5);
*/

//4. 冒泡排序和快速排序算法
// 冒泡排序:
/*function bubblesort($arr)
{
$n=count($arr);
for($i=0;$i<$n;$i++)
{
   for($j=0;$j<$n-$i-1;$j++)
    {
        if($arr[$j]>$arr[$j+1])
        {
        $temp=$arr[$j+1];
        $arr[$j+1]=$arr[$j];
        $arr[$j]=$temp;
        }
    }
}
return $arr;
}

$arr = array(49, 38, 65, 97, 76, 13, 27);
print_r(bubblesort($arr));
*/
// 快速排序:
/*function quick_sort($array)
{
    if (count($array) <= 1) return $array;

    $key = $array[0];   //把数组的第一个元素作为关键数据
    $left_arr = array();
    $right_arr = array();
    for ($i=1; $i<count($array); $i++)
    {
       if ($array[$i] <= $key)
       $left_arr[] = $array[$i];
       else
       $right_arr[] = $array[$i];
    }
    $left_arr = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);

    return array_merge($left_arr, array($key), $right_arr);
}
$arr = array(49, 38, 65, 97, 76, 13, 27);
$aResule = quick_sort($arr);
print_r($aResule);
*/
//5. 二维数组排序
/*function sortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
    if(!is_array($ArrayData))
    {
        return $ArrayData;
    }

    // Get args number.
    $ArgCount = func_num_args();

    // Get keys to sort by and put them to SortRule array.
    for($I = 1;$I < $ArgCount;$I ++)
    {
        $Arg = func_get_arg($I);
        if(!eregi("SORT",$Arg))
        {
            $KeyNameList[] = $Arg;
            $SortRule[]    = '$'.$Arg;
        }
        else
        {
            $SortRule[]    = $Arg;
        }
    }

    // Get the values according to the keys and put them to array.
    foreach($ArrayData AS $Key => $Info)
    {
        foreach($KeyNameList AS $KeyName)
        {
            ${$KeyName}[$Key] = $Info[$KeyName];
        }
    }

    // Create the eval string and eval it.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
}
//测试
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
print_r( sortArray($data,'volume','SORT_DESC', 'edition', 'SORT_ASC') );

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
150 [报告]
发表于 2010-10-02 01:38 |只看该作者
本帖最后由 hq8318 于 2010-10-02 01:45 编辑

//6. 每个元素之间加法
$data=array(1,2,3,4);
$count = count($data);
for($i=0;$i<$count;$i++) {  
   for($j=$i;$j<count($data);$j++) {  
       $sum[$i][$j] = $data[$i] + $data[$j];
   }
}
echo '<pre>';
print_r($sum);

//7. 背包问题
// set_time_limit(30);
define(’NOWTIME’,time());
function microtime_float()
{
list($usec, $sec) = explode(' ', microtime());
$sec=$sec-NOWTIME;
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
//开始计算
$wpnum=count($arywp);
$wpnum=20; //允许的物品类型数量
$bbw=rand(5*$wpnum,50*$wpnum); //背包允许最大重量
for($i1=0;$i1<$wpnum;$i1++){ //初始化每个物品类型的重量和价值
$arywp[$i1][0]=”w”.$i1; //名称
$arywp[$i1][1]=rand(50,80); //重量
$arywp[$i1][2]=rand(20,50); //价值
$arywp[$i1][3]=$arywp[$i1][2]/$arywp[$i1][1];//单位重量的最大价值
}

function cmp($a, $b){
$returnvalue=0;
if ($a[3] == $b[3]) {
$returnvalue= 0;
} else {
$returnvalue = ($a[3] > $b[3]) ? -1 : 1;
}
return $returnvalue;
}
//按单位最大价值排序
usort($arywp, 'cmp');
print_r($arywp);
echo " <br>\n";

//递归函数,计算剩余空间的允许物品最大价值
function getmaxval($bbw,$arywp){
//最大单位物品的重量、价值、数量
$use_w=0;
$use_v=0;
$ary_userwp=array();
//当前空间的允许物品最大价值
$maxwgt=0;
$maxval=0;
$maxuserwp=array();
$wp = array_shift($arywp);
$num= floor(($bbw-$use_w)/$wp[1]); //最大单位物品的最大允许个数
//echo ” countmax : $num * “.$wp[0].”<br/>\n”;
if(count($arywp)==0 || $bbw-$use_w==$wp[1]*$num){ //没有剩余物品或刚好填满 //递归结束条件
if($num>0){
$maxwgt+=$wp[1]*$num;
$maxval+=$wp[2]*$num;
$maxuserwp[$wp[0]]=$num;
}
} else {
for($i=0;$i<=$num;$i++){ //计算最大单位物品不同数量时的最大价值
$use_w=$wp[1]*$i;
$use_v=$wp[2]*$i;
$ary_userwp[$wp[0]]=$i;
if(($num-$i)*$wp[2]/($bbw-$use_w) < $arywp[0][3]){ //剩余空间的单位价值小于下件物品的单位价值
list($subuse_w,$subuse_v,$subusewp)=getmaxval($bbw-$use_w,$arywp);
} else {
$subuse_w=0;
$subuse_v=0;
$subusewp=array();
}
if($use_v+$subuse_v>$maxval || $maxval==0){ //比较最大价值
$maxwgt=$use_w+$subuse_w;
$maxval=$use_v+$subuse_v;
if($i>0){
$maxuserwp=array_merge($ary_userwp,$subusewp);
} else{
$maxuserwp=$subusewp;
}
}
}
//print_r($maxuserwp);
//echo ” maxwgt : $maxwgt maxval : $maxval<br/>\n”;
}
//返回 使用的重量,最大价值、使用的物品数量数组
return array($maxwgt,$maxval, $maxuserwp);
}

//开始计算
$arysulte= getmaxval($bbw,$arywp);
//输出结果
echo " bbw $bbw ";
print_r($arysulte);
$time_end = microtime_float();
$runtime=$time_end - $time_start ;
echo ' runtime: '.round($runtime,4).' seconds.';

//8. 随机抽出一个字母
define('bai',100);
$a=bai*0.1;$b=bai*0.2;$c=bai*0.3;$d=bai*0.4;
$c+=$d;$b+=$c;$a+=$b;
$num=rand(1,bai);

//d的概率大,故先从d开始
//1-40:d, 41-70:c, 71-90:b, 91-100:a
if ($num<=$d)   echo 'd';
elseif($d<$num && $num<=$c) echo 'c';
elseif($c<$num && $num<=$b) echo 'b';
else           echo 'a';
echo $num;

//9. 找回硬币,设硬币已按降序排列
function getChange($total,$price,$value){
        $total-=$price;
    foreach($value as $v){
            $remainder=$total%$v;
        $n[]=($total-$remainder)/$v;
        if($remainder==0) break;
        $total=$remainder;
    }
    return $n;
}
//测试
$total=100;$price=10;
$value=array(25,10,5,1);
$arr=getChange($total,$price,$value);
for($i=0;$i<count($arr);$i++){
        $arr[$i]=$value[$i].'*'.$arr[$i];
}
echo "$total-$price = ".($total-$price).' = '.implode(' + ',$arr);
// print_r($arr);

//10. 猴子分桃
function fun($n,$m)
{
$num = 5*$n+1;
for($i=$m;$i>1;$i--){
    if(!is_int($num = ($num/4))) continue;
    // $num = ($num/4)*5+1;
    $num = $num*5+1;
}
if(is_int($num))  return;
else{
      $num=fun(++$n,$m);
      return $num;
     }
}
echo fun(1,5);

//11. 鸡的数目
for ($i = 0; $i<=33; $i++){      //公鸡      
       for ($j = 0; $j<=20; $j++){  //母鸡
          $k=100-$i-$j;             //小鸡
          if($i*3+$j*5+$k/3==100)
          echo "$i $j $k<br>\n";
       }
}

//12. 小猴吃枣

function fun($x,$n){
        static $y=0;
    if($n==0) return;
    $y=$x;
    fun(2*($x+1),$n-1);
    return $y;
}
echo fun(1,10);

//14. 小球弹跳的总路程
/*function fun($x,$rate,$stop,$y=null){
        if($y==null) $y=$x;
        static $run=0;
    if($x/$y<$stop) return;
    $run+=$x;
    fun($x*$rate,$rate,$stop,$y);
    return $run;
}
echo fun(10,0.7,0.001);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP