免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
71 [报告]
发表于 2010-09-20 16:56 |只看该作者
我纯支持了

论坛徽章:
0
72 [报告]
发表于 2010-09-21 04:46 |只看该作者
大赛试题:注:选择的题数越多,分值越高,得奖越高试题附件下载:大赛试题.doc(102.5KB)

论坛徽章:
0
73 [报告]
发表于 2010-09-21 08:37 |只看该作者
占位待回

论坛徽章:
0
74 [报告]
发表于 2010-09-21 08:56 |只看该作者
我要参加 

论坛徽章:
0
75 [报告]
发表于 2010-09-21 09:02 |只看该作者
本帖最后由 ypyouyp 于 2010-09-24 02:14 编辑

开发环境:
OS :          Linux tiger 2.6.27.41-170.2.117.fc10.i686
Server:    nginx/0.7.64
PHP:       PHP Version 5.2.9


in.txt
1.2,4,5,7,11,14,17,20
2.2,4,5,7,9,11,13,14,15,17,19

程序第一,二题
  1. <?php
  2. $fp = fopen("in.txt", 'r');
  3. while(!feof($fp)) {
  4.         $buf = fgets($fp);//逐次读取每一条记录
  5.         //echo $buf;
  6.         if(empty($buf)) continue;
  7.         $question = explode(".", $buf);
  8.         $question_num = $question[0];
  9.         echo "第{$question_num}题:初始数据是:{$question[1]}<br />";
  10.         $data = explode(",", $question[1]);
  11.         switch($question_num) {
  12.         case 1:
  13.                 $new_data = rand(0, 20);//生成随机待插入的数
  14.                 echo "随机插入的新数是{$new_data}<br />";
  15.                 $begin = 0;
  16.                 $end = count($data);//获取数组的个数
  17.                 $data = insert_data($data, $new_data, $begin, $end);//返回一个新的有序数组
  18.                 show_data($data, $new_data);
  19.                 write_data($data);
  20.                 break;
  21.         case 2:
  22.                 $new_data = rand(0, 20);//生成随机待插入的数
  23.                 echo "随机生成的待寻找的数是{$new_data}<br />";
  24.                 $begin = 0;
  25.                 $end = count($data);//获取数组的个数
  26.                 $index = binsearch($data, $new_data, $begin, $end);
  27.                 if($index == -1) {
  28.                         echo "在原数组中没有找到要搜索的数据 {$new_data}<br />";
  29.                 } else {
  30.                         echo "在原数组中,待搜索的数据 {$new_data} 的下标是 {$index}<br />";
  31.                 }
  32.                 write_data($data);
  33.                 break;
  34.                 default:break;
  35.         }
  36.         echo "<p></p>";
  37. }
  38. /* 生成一新的数据$new_data,将该数据有序的插入到原数组$data之中,
  39. * 二分查找待插入的数据应该所处的位置
  40. */
  41. function insert_data($data, $search_data, $begin, $end) {
  42.         $mid = intval(($begin + $end)/2);
  43.         while($mid != $begin) {
  44.                 if($data[$mid] > $search_data) {
  45.                         return insert_data($data, $search_data, $begin, $mid);
  46.                 } else
  47.                 if($data[$mid] < $search_data) {
  48.                         return insert_data($data, $search_data, $mid, $end);
  49.                 } else {
  50.                         //找到和待插入的数据一样的数据了,
  51.                         return generate_array($data, $mid, $search_data);
  52.                 }
  53.         }
  54.         //到达了他应该所处的位置$mid附近
  55.         if($data[$mid] > $search_data) {
  56.                 return generate_array($data, $mid, $search_data);
  57.         } else {
  58.                 return generate_array($data, $mid+1, $search_data);
  59.         }
  60. }
  61. /*
  62. * 二分查找,$begin起始下标,$end结束下标s
  63. */
  64. function binsearch($data, $search_data, $begin, $end) {
  65.         $mid = intval(($begin + $end)/2);
  66.         while($mid <= $end) {
  67.                 if($data[$mid] > $search_data) {
  68.                         return binsearch($data, $search_data, $begin, $mid);
  69.                 } else
  70.                 if($data[$mid] < $search_data) {
  71.                         return binsearch($data, $search_data, $mid, $end);
  72.                 } else {
  73.                         return $mid;
  74.                 }
  75.         }
  76.         return -1;//没有找到
  77. }
  78. /*
  79. * 将新的数据合并到老数组之中,位于$index的位置
  80. */
  81. function generate_array($data, $index, $new_data) {
  82.         $length = count($data);
  83.         while($index < $length) {
  84.                 $data[$length] = $data[$length-1];
  85.                 --$length;
  86.         }
  87.         $data[$index] = $new_data;
  88.         //print_r($data);
  89.         return $data;
  90. }
  91. //将数据写入文件out.txt
  92. function write_data($data) {
  93.         $fp = fopen("out.txt", "a");
  94.         $i = 0;
  95.         while(isset($data[$i])) {
  96.                 fwrite($fp, $data[$i].",");
  97.                 ++$i;
  98.         }
  99.         fwrite($fp,"\n");
  100.         fclose($fp);
  101. }
  102. //输出数据
  103. function show_data($data, $new_data) {
  104.         $i = 0;
  105.         while(isset($data[$i])) {
  106.                 if($data[$i]==$new_data) {
  107.                         echo "<strong>$data[$i]</strong>,";
  108.                 } else {
  109.                         echo $data[$i].",";
  110.                 }
  111.                 ++$i;
  112.         }
  113. }

  114. ?>
复制代码
http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=12899305&ptid=1788191


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. ?>
复制代码
http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=12898518&ptid=1788191

//第3题 杨辉三角

  1. <?php
  2. pascal_triangle(6);
  3. function pascal_triangle($order) {
  4.         $i = 0;
  5.         $tmp = array();
  6.         //杨辉三角生成 至第 $order 层处停止
  7.         while($i <= $order) {
  8.                 $j = 0;
  9.                 //生成第 $i+1 层
  10.                 while($j <= $i) {
  11.                         //将第 $i层的行首和行尾置为 1 输出,第一,二层均在此处生成
  12.                          if($j == 0 || $j == $i) {
  13.                                 $data[$j] = 1;
  14.                                 echo $data[$j]." ";
  15.                         } else {
  16.                                 //处理第二层以后的非边界值的存储和输出
  17.                                 //通过第二层的数据生成第三层的中间值并输出,并临时存储到$tmp[$j]
  18.                                 $tmp[$j] = $data[$j-1] + $data[$j];
  19.                                 echo $tmp[$j]." ";
  20.                         }
  21.                         ++$j;
  22.                 }
  23.                 //补全$tmp数组的边界,即$tmp完整存储第$i层的所有数据
  24.                 $tmp[0] = 1;
  25.                 $tmp[$i] = 1;
  26.                 //将补全后的$tmp 赋值给 $data ,以便进行下层运算
  27.                 $data = $tmp;
  28.                 echo "<br />";
  29.                 ++$i;
  30.         }
  31. }
复制代码
//第8题 字母的概率出现算法

  1. <?php
  2. test();
  3. function test() {
  4.         $count[0] = 0;
  5.         $count[1] = 0;
  6.         $count[2] = 0;
  7.         $count[3] = 0;
  8.         for($i = 0; $i < 10000; ++$i) {
  9.                 $letter = get_letter();
  10.                 switch($letter) {
  11.                 case 'A':
  12.                         ++$count[0];break;
  13.                 case 'B':
  14.                         ++$count[1];break;
  15.                 case 'C':
  16.                         ++$count[2];break;
  17.                 case 'D':
  18.                         ++$count[3];break;
  19.                 }
  20.                 //print_r($count);
  21.         }
  22.         print_r("<br />A:".$count[0]/10000);
  23.         print_r("<br />B:".$count[1]/10000);
  24.         print_r("<br />C:".$count[2]/10000);
  25.         print_r("<br />D:".$count[3]/10000);
  26. }

  27. function get_letter() {
  28.         $letter = rand(1,10);
  29.         //A 的概率是 1次
  30.         if($letter == 1) { return 'A'; }
  31.         else
  32.     //B的概率是 2次
  33.         if($letter > 1 && $letter <= 3) {
  34.                 return 'B';
  35.         } else
  36.         if($letter >3 && $letter < 7) {
  37.                 return 'C';
  38.         } else {
  39.                 return 'D';
  40.         }
  41. }
  42. ?>
复制代码
字母的概率出现结果
A:0.097
B:0.1953
C:0.3046
D:0.4031


//第11题 百钱买百鸡

  1. <?php
  2. hands_money_chook();
  3. function hands_money_chook() {
  4.         for($a = 0; $a <= 33; ++$a) {
  5.                 for($b = 0; $b < 20; ++$b) {
  6.                         if(3*$a + 5*$b + (100-$a-$b)/3 == 100) {
  7.                                 echo "公鸡数量:".$a."-----";
  8.                                 echo "母鸡数目:".$b."----";
  9.                                 $c = 100-$a-$b;
  10.                                 echo "小鸡数目:".$c."<br />";
  11.                         }
  12.                 }
  13.         }
  14. }

  15. ?>
复制代码
公鸡数量:4-----母鸡数目:12----小鸡数目:84
公鸡数量:11-----母鸡数目:8----小鸡数目:81
公鸡数量:18-----母鸡数目:4----小鸡数目:78
公鸡数量:25-----母鸡数目:0----小鸡数目:75

http://bbs.chinaunix.net/redirec ... 09&ptid=1788191

//第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. ?>
复制代码
小球的总路径长度为:56.621451049098

//第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. ?>
复制代码
三个数中的最大值是 :28



http://bbs.chinaunix.net/redirec ... 45&ptid=1788191

//第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. ?>
复制代码
桃子总数至少为 : 3124


//第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. ?>
复制代码
枣子的总数为:1534


20、简述如何得到当前执行脚本路径,包括所得到参数。
说明:例如有一个脚本www.domain.com,传给他的参数有参数1,参数2,参数3….

print_r($_SERVER['REQUEST_URI']);

25、写出查询发贴数最多的十个人名字的SQL,利用下表:
members(id,username,posts,pass,email)
  1. select username from members order by posts desc limit 10
复制代码
27、有一数组 $a=array(4,3,8,9,2);请将其重新排序(按从小到大的顺序列出)。

  1. <?php
  2. $a=array(4,3,8,9,2);
  3. print_r($a);
  4. function bubble_sort($a) {
  5.         $num = count($a);//获取数组的最大下标边界
  6.         //遍历 $num 次,每次获取一个最大值
  7.         for($i = 0; $i < $num; ++$i) {
  8.                 //第$i次遍历,获得第 $num-$i-1 的值(在0--$num-$i-1 中最大)
  9.                 for($j = 1; $j < $num-$i; ++$j) {
  10.                         //如果靠前为位置的值较靠后的相邻的值大,进行交换,依次类推
  11.                         if($a[$j-1] > $a[$j]) {
  12.                                 $tmp = $a[$j-1];
  13.                                 $a[$j-1] = $a[$j];
  14.                                 $a[$j] = $tmp;#
  15.                         }
  16.                 }
  17.         }
  18.         return $a;
  19. }
  20. ?>
复制代码
Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 8 [4] => 9 )


29、对于大流量的网站,您采用什么样的方法来解决访问量问题?

  1. 1.页面静态化
  2. 2 .数据库服务器与web服务器分开
  3. 3.使用memcache
复制代码

论坛徽章:
0
76 [报告]
发表于 2010-09-21 11:21 |只看该作者
前来支持,呵呵

论坛徽章:
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
77 [报告]
发表于 2010-09-21 13:04 |只看该作者
回复 2# 草上飞2008


   
1+1=2,1+2=3,1+3=5,


严重错误。1+3=5

论坛徽章:
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
78 [报告]
发表于 2010-09-21 13:06 |只看该作者
6:写一个function实现数组内每个元素之间加法的递代运算?
注:数组元素全部为自然数.

例:
$data=array(1,2,3);
程序要求打印出数组每个数组元素相互之间各种可能性加法(包括元素自已本身加法)

1+1=2,1+2=3,1+3=5,
2+2=4,2+3=5,
3+3=6

打印出以下结果
Array   
(   
     [0] => Array   
         (   
             [0] => 2   
             [1] => 3   
             [2] => 4   
         )   
     [1] => Array   
         (   
             [1] => 4   
             [2] => 5   
         )   
     [2] => Array   
         (   
             [2] => 6   
         )   
)
  1. <?php
  2.         function addArr($data){
  3.                 $arr=array();
  4.                 for ($i=0;$i<sizeof($data);$i++){
  5.                         $arr[$i][0]=$data[$i]+$data[$i];
  6.                         for($j=$i+1;$j<sizeof($data);$j++){
  7.                                 $arr[$i][$j]=$data[$i]+$data[$j];
  8.                         }
  9.                 }
  10.                 print_r($arr);
  11.     }
  12.     $data=array(1,2,3);
  13.     addArr($data);
  14. ?>
复制代码

论坛徽章:
0
79 [报告]
发表于 2010-09-21 16:04 |只看该作者
26、如何通过javascript判断一个窗口是否已经被屏蔽。
要判断open方法所打开的窗口时,就按 open()的值来进行判断。
如果要判断原窗口被屏蔽, 用opener属性来判断, opener.closed如果为true, 就是主窗口关闭了。

论坛徽章:
0
80 [报告]
发表于 2010-09-21 16:11 |只看该作者
27、有一数组 $a=array(4,3,8,9,2);请将其重新排序(按从小到大的顺序列出)。
  1. <?php
  2.     $a = array(4,3,8,9,2);
  3.     sort($a);
  4.     for ($i=0; $i<6; ++$i){
  5.         echo $a[$i]." ";
  6.     }
  7.     ?>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP