免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 278031 | 回复: 835
打印 上一主题 下一主题

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

论坛徽章:
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
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-19 10:09 |只看该作者 |倒序浏览
大家好,
实在不好意思,比赛结果的发布有所推后。
这次活动,非常感谢杨林等本次大赛的评委,帮忙实现了本次大赛的评选。

11.26
请以下获奖者将 收件人姓名、电话、邮箱、邮寄地址,发站短给 "魔法鱼。" 小妹妹。同时,魔法鱼 小妹妹也会跟你们联系。
编程大赛试题 - 答案.doc (236.05 KB, 下载次数: 1426)

获奖名单如下:
一等奖(20题以上)
abaowu
renxiao2003
starzhestarzhe
yifangyou
hq8318
激励:
(1)、送ChinaUnix高质量电脑包,价值:298元
(2)、任选华章培训网(www.hztraining.com)1套课程。或者,华章1本图书(www.hzbook.com),按下面的
书单选择

二等奖(10题以上)
hq_333
angle4
iostranger
witer666
光速
broadway2008
ypyouyp
pincs
激励:
(1)ChinaUnix 9周年 限量版ChinaUni秋季长袖T恤:1件,价值:198元。
(2)华章1本图书(www.hzbook.com),按下面的书单选择

三等奖(5 题以上)
lygxy
ttgive
tkchks
surpass
shangat
rubylc
fansekey
sdynzx
激励:
(1)ChinaUnix 9周年 限量版精美纪念真空保温杯,价值:128元。
(2)华章1本图书(www.hzbook.com),按下面的书单选择

奖品目录:图书名单:
php和mysql web开发(原书第4版)
mysql核心技术手册(第2版)
php应用程序安全编程
php实例精通


纪念奖(一题以上)【积分已添加】
kuco945
skylove
hu198021688500
jayeeliu
brightsun
一路征程一路笑
zhumao
xz1980
xindi10631
sydaijingjing
sychangchun
nokianihao
motorocke6
kuhanzhu
jingzhi
int20
expert1
dz902
激励:ChinaUnix可用积分,200分

----------------------------------------------------------------------------------------------------------------------------------------

大家好啊:

      如今,随着LAMP平台等应用的深入,PHP已经成为重要的编程技术,特别是在互联网企业中。
      在这种情况下,你的PHP编程技术的应用情况如何呢?
      如果你现在负责运维方面的工作,如果能够深入学习一下PHP编程技术,是不是让工作更上一层楼呢?
      
      为了更好地学习PHP编程技术,同时,为了迎接ChinaUnix九周年庆。
      我们ChinaUnix社区联合PHPChina社区、华章培训网、中国互动出版网,一起举办本次PHP编程大赛。欢迎大家积极参加啊。(我们正在准备C/C++编程大赛,诚邀大家加入C/C++的大赛评委。)

【大赛流程】
     1、根据大赛试题,采用PHP语言编制相应的程序代码。(大赛试题请参见第二贴)
        注:大赛试题有34道题,大家可以根据自己的情况选择做。当然,做得越多,得分越高了。
      (1)为了便于最终测试评定,提交的每个程序都必须带有in.txt,out.txt,前者表示数据数据文件,后者表示输出数据文件,同时代码要求必须有详细注释;
      (2)提交作品时要求带有可执行文件,直接执行程序,即可从in.txt读取输入数据,最后把输出结果保存到out.txt。
      (3)有些题目需要,可实现多组输入。

     2、参赛者将做好的题目,在本贴中跟帖提交。
        注:提交时,请将选择的比赛题目和答案附在一起。
     3、活动持续45天,评选为时间为7天,最后在本贴里公布最终标准答案和获奖结果。

【活动细则】
(1)代码规范:使用标准PHP语言,采用编程标准可以使项目更加顺利地完成。
(2)性能:应用程序运行正常,可以执行用户或客户所需的所有任务,并不意味着程序在任何方面都是完美的,更高的运行性能才能我们所追求的。
(3)简洁:写代码是一种艺术。除了正确的缩进、大小写、命名规则之外,请时刻牢记爱因斯坦的名言--简单就是美。
(4)每位会员可以发表多个代码,以最高评价为准,不可重复获奖;
(5)提交代码请跟帖发表,并附相关系统环境及编译环境说明。

注:严禁抄袭,一经发现,取消评选资格;
代码类似,以发表时间为准,取最早发布或者修改时间者为优秀


【大赛时间】
     参赛时间:2010.09.19~2010.11.09
     评选时间:2010.11.10~2010.11.17
     结果公布:2010.11.18


【大赛评委团】
大赛评委分为两组,一组是来自ChinaUnix社区的社区评委,一组是来自PHPChina的社区评委:

ChinaUnix社区评委: (还在不断邀请中,如有兴趣加入评委团,请知会一下)

HonestQiao:
乔楚,ChinaUnix PHP版主,ChinaUnix元老级版主,有着多年丰富的PHP开发、系统运维经验。

bs(杨林):
ChinaUnix PHP版版主,真名杨林,现任福州幻想网络游戏公司开发主管,历任网龙公司、网讯技术公司等多个公司PHP资深PHP程序员。专注服务端程序开发7年,精通PHP,熟悉分布式多进程多并发程序开发、MySQL管理及其优化等。是chinaunix、phpx、phpchina 等技术版版主/专家组成员。(邮箱:hittyo@gmail.com

PHPChina社区评委:
戴志康,康盛世纪CEO:
开发设计的自动生成社区的软件 Discuz!,开始是免费给人使用,是中国最早,也是最有影响力的PHP开发者之一。从2001年起,独立设计开发出社区论坛系统Discuz! Board,至2006年,已成为全球用户数最多的PHP社区论坛软件之一。
陈秋武,PHPChina技术总监:
近10年web开发经验,4年PHP程序。熟悉LAMP开发。项目经验丰富,精通正则,web优化,熟悉Discuz/Uchome。Oracle PL/SQL、MySQL存储过程、高性能web架构优化。

李云,PHPChina高级讲师:
康盛创想资深PHP工程师,多年资深网站开发以及管理经验,精通LAMP架构,熟悉多种操作系统、C、ASP、LAMP开发及数据库等,对国内Discuz!、SupeSite、UCHome、PHPWind等开源产品有深入研究。

邓椿志,PHP和MYSQL专家:
曾经接手的项目:《机械振动》课程虚拟仿真实验,多个英语教学光盘,网络考试系统、《土壤肥料学》网络课程、《园艺专业生产实习指导》网络课件视频类,《用多媒体学Word 2007》、《用多媒体学Excel2007》、《用多媒体学PowerPoint 2007》,编程教学类,《网站前台后台七日通》视频教学光盘。

大赛联系人:
     草上飞2008,MSN:thomas_tang@21cn.com
     Sendlinux,rmzhou@staff.chinaunix.net
     杜正彬,华章培训网负责人,本次活动的组织者之一,QQ:1575978263
     在此次活动中,大家如有什么问题,请与我们联系。

【奖项设置】
一等奖:3名    答对20题:
     (1)、送ChinaUnix高质量电脑包,价值:298元

这款背包为商用电脑背包,舱室比较多,有电子设备仓,贵重物价证件仓,资料仓和电脑仓。
     (2)、任选华章培训网(www.hztraining.com)1套课程。

二等奖:10名   答对10道题以上
     (1)ChinaUnix 9周年 限量版ChinaUni秋季长袖T恤:1件,价值:198元。
     (2)华章1本图书(www.hzbook.com),可按书单选择

三等奖:15名   答对5道题以上
     (1)ChinaUnix 9周年 限量版精美纪念真空保温杯,价值:128元。


     (2)华章1本图书(www.hzbook.com),可按书单选择

纪念奖:提交1道题以上(不管对错)
       ChinaUnix可用积分,200分

特别说明:获奖名额按时间从高往低排,例如:如果同时6人答对20题,则按提交答题的时间选择。
             大家将题目回在本贴里后,我们的社区同事美女“小魔法鱼”,将会把答题汇总,随后进行评选公布。

奖品目录:图书名单:
php和mysql web开发(原书第4版)
mysql核心技术手册(第2版)
php应用程序安全编程
php实例精通

战略合作伙伴介绍:华章培训网精品教程
华章培训(www.hztraining.com)直属于北京华章图文信息有限公司。它是一个全方位的网络视频培训平台,旨在建立全球最大的中文网络视 频培训平台。华章培训的主要业务包括:IT培训及讲座、经管培训及讲座、心理学培训及讲座、健康培训及讲座、外语培训及讲座等等。
我们的目标是为会员提供专业的学习交流互动网络平台,所提供的视频让会员一看就懂,一懂就用,一用就灵。
目前我们拥有海量免费视频教程资源,还有精品教程,欢迎大家访问:www.hztraining.com

论坛徽章:
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
2 [报告]
发表于 2010-09-19 10:09 |只看该作者
大赛试题:
注:选择的题数越多,分值越高,得奖越高
试题附件下载
大赛试题.doc (102.5 KB, 下载次数: 898)

1:要求在一组数中,插入一个新数,并维护原来的排序方式不变

2:用二分法在一个数组中查找你所需元素

3:打印一个杨辉三角
1
1   1
1  2  1
1  3  3  1
1  4  6  4  1
1  5  10 10  5  1

4:使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

5:写一个二维数组排序函数,能够具有通用性

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   
         )   
)

7:设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。

8:设随机抽到A的概率为0.1,B的概率为0.2,C的概率为0.3,D的概率为0.4,现在求按此概率随机抽出一个字母的算法,

9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩

10:五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,发现还多一个,它吃掉这桃子,并拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子数最少应该有几个呢?

11:公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目。

12:小猴第一天摘下若干枣子,当即吃掉了一半,不过瘾又多吃了一个;第二天吃了剩下的一半又多吃了一个;以后每一天都吃了前一天剩下的一半多一个。到第十天小猴再想吃时,见到只剩下一只枣子了。问第一天这堆枣子有多少?

13:有一艘大船准备用来装载货物。所有待装货物都装在货箱中且所有货箱的大小都一样,但货箱的重量都各不相同。设第i 个货箱的重量为wi(1≤i≤n),而货船的最大载重量为c,如何在货船上装入最多的货物。

14:小球从10米高处自由下落,每次弹起的高度是下落高度的70%,当小球弹起的高度不足原高度的千分之一时,小球很快会停止跳动,计算小球在整个弹跳过程中所经历的总路程(忽略弹起高度不足原高度千分之一的部分)。

15、 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这样的自然数),这个数组中元素的个数。以及大数组中每个元素。如图:

16、假设数据库中有两个表table1和table2,这两个表结构相同,都有三个字段id、name和description,分别存放编号、名称和描述。
现在请做一个页面,包含两个下拉菜单,第一个下拉菜单内是table1中的name,第二个下拉菜单内是table2中的name。下拉菜单的默认值是无,当选择了table1中的任意一个name时,出现一个textarea框显示name对应的description。当选择了table2中的任意一个name时,出现一个textarea框显示name对应的description,并且保留上一个下拉菜单的值和textarea中的值。Textarea中的值可修改,需要做到修改第一个textarea的值,然后更改第二个下拉菜单的值后,第一个textarea中的修改值仍然保留。最后是一个提交按钮,只有按下提交按钮,才会把textarea中的数据才会存入数据库。如图:
默认界面:

选择第一个下拉菜单的值:

修改第一个菜单的中描述的值,然后选择第二个菜单的name值

        提交后才会存入数据库:
         
17、有一个数组array('a','b','c','d','e','f'),请使用两段代码分别达成图1和图2中的效果。
图1:

图2:


       
18、请使用一句话将类似“1910-09-09”的日期各式转换为“一九一零年九月九日”这样的各式。(需要有通用性,是不是一句话不是关键,但不允许使用if\switch\while\for等语句)。

19、有一张表test,包含四个字段id, question, answer,rank里面有1000条数据。要求做一个页面,随机抽取50道题目(都是单选题),分页显示所有的题目,每页显示1题。按钮包含:第一题—上一页—当前第N题—下一页—最后一题。交卷后将每一题的答案和数据库中的标准答案作比较,相同+2分,最后得出成绩存入rank。


20、简述如何得到当前执行脚本路径,包括所得到参数。
说明:例如有一个脚本www.domain.com,传给他的参数有参数1,参数2,参数3….
传递参数的方法有可能是GET有可能是POST,那么现在请写出类似
http://www.domain.com/script.php? 参数1=值1&参数2=值2..... 的结果

21、写出一个能创建多级目录的PHP函数
22、有一个留言板,用mysql做数据库
用户信息包括:用户名,密码,email   
留言内容包括:留言ID,标题,内容,发表时间,状态(审核,未审核)
请实现下列需求:
1)数据库结构。无需写建表语句,用类似下面的表格,描述清楚即可
表明        table_aaa
字段名        字段说明        字段类型        索引
name        姓名        Varchar(64)        唯一索引
gender        性别        Enum(‘M’,‘F’)       
注意,要在索引栏中注明是否需要创建索引,以及要创建的索引的类型
用一个sql语句查询出发表留言数量大于10条的用户名及其留言数量,查询结果按留言数量降序排列

23、写出php的public、protected、private三种访问控制模式的区别

24、 给你三个数,写程序求出其最大值。

25、写出查询发贴数最多的十个人名字的SQL,利用下表:
members(id,username,posts,pass,email)

26、如何通过javascript判断一个窗口是否已经被屏蔽。

27、有一数组 $a=array(4,3,8,9,2);请将其重新排序(按从小到大的顺序列出)。

28、写出匹配邮箱地址和URL的两个正则表达式。类似下面的:
邮箱地址:user_name.first@hztraining.com
URL地址:http://www.hztraining.com/user_profile.php?uid=100

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

30、MySQL数据库,一天一万条以上的增量,怎么优化?

31、写个函数来解决多线程同时读写一个文件的问题。

32、一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)

33、写一个函数,算出两个文件的相对路径
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

34、用写一个类实现会员管理,要求实现:
1)用文件存储会员信息,会员注册输入用户名和电子邮件就行。   
2)用户信息包括:用户名,电子邮件。
3)要求用户可以登录、退出和注销用户。
4)如果用户没有退出,下次登录自动显示用户名。
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
3 [报告]
发表于 2010-09-19 11:50 |只看该作者
本帖最后由 renxiao2003 于 2010-10-11 21:19 编辑

先占个位。十一回家答题去。
为了体现每个题的时间,我都单独发一个帖子,然后汇总到这个帖子里。由于6#汇总了几个帖子,但是怕总在六楼更新体现不出原来几个题的时间,所以不再更新六楼,这个楼层作为我所有答题的汇总。

1:要求在一组数中,插入一个新数,并维护原来的排序方式不变http://bbs.chinaunix.net/redirec ... 788191&pid=12898841
  1. <?php
  2.     //1:要求在一组数中,插入一个新数,并维护原来的排序方式不变
  3.     function insertArr($arr,$val){
  4.             $pos=0;
  5.             if (sizeof($arr)==0) return array($val); //传入数组没有值
  6.             if (sizeof($arr)==1){ //传入数组个数为1
  7.                     return array($val,$arr[0]);
  8.             }
  9.             $bfind=false;
  10.             if ($arr[0]>$arr[sizeof($arr) - 1]){
  11.                     $bfind=true; //从大到小排序
  12.             }else{
  13.                     $bfind=false;//从小到大排序
  14.             }
  15.             for($i=0;$i<sizeof($arr);$i++){ //找到要插入值应该插入的位置。
  16.                     if ($bfind){
  17.                             if ($arr[$i]<$val){
  18.                                     $pos=$i;
  19.                                     break;
  20.                             }
  21.                     }else{
  22.                             if ($arr[$i]>$val){
  23.                                     $pos=$i;
  24.                                     break;
  25.                             }
  26.                     }
  27.             }
  28.             $left_arr=array();
  29.             $right_arr=array();
  30.             for ($i=0;$i<sizeof($arr);$i++){ //根据要插入的值把数组分左右两部分。
  31.                     if ($i<$pos){
  32.                             $left_arr[]=$arr[$i];
  33.                     }else{
  34.                             $right_arr[]=$arr[$i];
  35.                     }
  36.             }
  37.             return array_merge($left_arr,array($val),$right_arr);
  38.     }
  39.     //测试
  40.     $arr=array();
  41.     print_r(insertArr($arr,10));echo "<br>";
  42.     $arr=array(1);
  43.     print_r(insertArr($arr,10));echo "<br>";
  44.     $arr=array(1,3,8,12,13,15);
  45.     print_r(insertArr($arr,10));echo "<br>";
  46.     $arr=array(31,23,18,12,11,1);
  47.     print_r(insertArr($arr,10));echo "<br>";
  48. ?>
复制代码
2:用二分法在一个数组中查找你所需元素http://bbs.chinaunix.net/redirec ... 788191&pid=12898685
  1. <?php
  2.         //二分法
  3.         function binarySearch($a, $val){
  4.                 $low = 0;
  5.                 $high= count($a) - 1;
  6.                 while($low <= $high){
  7.                         $mid = intval(($low+$high)/2);
  8.                         if($a[$mid] == $val) return $mid; //找到相等的就返回所在的位置
  9.                         if($a[$mid] > $val){  //要查找的在前半截
  10.                                 $high = $mid - 1;
  11.                         }else{
  12.                                 $low = $mid + 1;  //要查找的在后半截
  13.                         }
  14.                 }
  15.                 return -1;
  16.         }
  17.         //测试
  18.     $arr=array(1,3,6,8,10);
  19.     echo binarySearch($arr,3); //数组从0开始,故返回值是1
  20. ?>
复制代码
3:打印一个杨辉三角 http://bbs.chinaunix.net/redirec ... 788191&pid=12883362
1
1   1
1  2  1
1  3  3  1
1  4  6  4  1
1  5  10 10  5  1
  1. <?php
  2.         /**=============================
  3.          * 功能:生成杨辉三角数组。
  4.          * 参数:$num 要生成的列数。
  5.          */
  6.         function generationYanghui($num){
  7.                 $arr=array();   
  8.             for ($i=0;$i<$num;$i++){
  9.                     $arr[$i]=array();
  10.                     //第一行和第二行均为1
  11.                     if ($i==0){
  12.                             $arr[$i][0]=1;
  13.                             continue;
  14.                     }
  15.                     if ($i==1){
  16.                             $arr[$i][0]=1;
  17.                             $arr[$i][1]=1;
  18.                             continue;
  19.                     }
  20.                     //从第三行开始,第一个和最后一个为1,
  21.                     //第二个喂上一行的前一个位置的值和本位置的值的和。
  22.                 for ($j=0;$j<=$i;$j++){
  23.                         if ($j==0){
  24.                                 $arr[$i][$j]=1;
  25.                                 continue;
  26.                         }
  27.                         if ($j==$i){
  28.                                 $arr[$i][$j]=1;
  29.                                 continue;
  30.                         }
  31.                         $arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j];
  32.                 }
  33.             }
  34.             return $arr;
  35.     }
  36.     //测试生成并打印出杨辉参数
  37.     $num=6;
  38.     $arrYH = generationYanghui($num);
  39.      
  40.     for ($i=0;$i<sizeof($arrYH);$i++){
  41.             for($j=0;$j<sizeof($arrYH[$i]);$j++){
  42.                     echo $arrYH[$i][$j] . " " ;
  43.             }
  44.             echo "<Br>";
  45.     }
  46. ?>
复制代码
4:使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组
http://bbs.chinaunix.net/redirec ... 788191&pid=12893006
冒泡排序算法:
  1. <?php
  2.     //冒泡排序(一维数组)
  3.     function bubble_sort($arr){
  4.         $count = count($arr);
  5.         if ($count <= 0) return false;
  6.         for($i=0; $i<$count; $i++){
  7.             for($j=$count-1; $j>$i; $j--){
  8.                  if ($arr[$j] < $arr[$j-1]){
  9.                      $tmp = $arr[$j];
  10.                      $arr[$j] = $arr[$j-1];
  11.                      $arr[$j-1] = $tmp;
  12.                   }
  13.               }         }
  14.          return $arr;
  15.      }
  16.      //使用实例
  17.    $_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4');
  18.      $_array = bubble_sort($_array);
  19.      print_r ($_array);
  20. ?>
复制代码
快速排序算法:
  1. <?php
  2.     function quick_sort($arr){
  3.         if(count($arr)<=1){
  4.             return $arr;
  5.         }
  6.         $key=$arr[0];
  7.         $left_arr=array();
  8.         $right_arr=array();
  9.         for($i=1;$i<count($arr);$i++){
  10.             if($arr[$i]<=$key){
  11.                 $left_arr[]=$arr[$i];
  12.             }else{
  13.                 $right_arr[]=$arr[$i];
  14.             }
  15.         }
  16.         $left_arr=quick_sort($left_arr);
  17.         $right_arr=quick_sort($right_arr);
  18.         return array_merge($left_arr,array($key),$right_arr);
  19.     }
  20.     //使用实例
  21.      $_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4');
  22.      $_array = quick_sort($_array);
  23.      print_r ($_array);
  24. ?>
复制代码
5:写一个二维数组排序函数,能够具有通用性 http://bbs.chinaunix.net/redirec ... 788191&pid=12942807
  1. /**
  2. * 参数1 array 待排序的苏组
  3. * 参数2 string 第一项排序关键字
  4. * 参数3 string 排序方法,升序还是降序("SORT_ASC"|"SORT_DESC")  
  5. * 参数4 string 排序类型,值有("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")  
  6. * 返回值 array   排序后的数组  
  7. */
  8. function MultiArraySort($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")   
  9. {   
  10.   if(!is_array($ArrayData))   
  11.   {   
  12.       return $ArrayData;   
  13.   }   
  14.   // Get args number.   
  15.   $ArgCount = func_num_args();   
  16.   // Get keys to sort by and put them to SortRule array.   
  17.   for($I = 1;$I < $ArgCount;$I ++)   
  18.   {   
  19.       $Arg = func_get_arg($I);   
  20.       if(!eregi("SORT",$Arg))   
  21.       {   
  22.           $KeyNameList[] = $Arg;   
  23.           $SortRule[]    = '$'.$Arg;   
  24.       }   
  25.       else  
  26.       {   
  27.           $SortRule[]    = $Arg;   
  28.       }   
  29.   }   
  30.   // Get the values according to the keys and put them to array.   
  31.   foreach($ArrayData AS $Key => $Info)   
  32.   {   
  33.       foreach($KeyNameList AS $KeyName)   
  34.       {   
  35.           ${$KeyName}[$Key] = $Info[$KeyName];   
  36.       }   
  37.   }   
  38.   // Create the eval string and eval it.   
  39.   $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';   
  40.   eval ($EvalString);   
  41.   return $ArrayData;   
  42. }  
复制代码
6:写一个function实现数组内每个元素之间加法的递代运算?http://bbs.chinaunix.net/redirec ... 788191&pid=12890913
注:数组元素全部为自然数.

例:
$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. ?>
复制代码
7:设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。http://bbs.chinaunix.net/redirec ... 788191&pid=12943300
  1. <?php
  2. /*
  3. 设有n 种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n 种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。
  4. Input
  5. 第一行:两个整数,M(背包容量,M<= 200)和N(物品数量,N<= 30); 第2..N+1 行:每行二个整数Wi,Ui,表示每个物品的重量和价值。
  6. Output
  7. 仅一行,一个数,表示最大总价值。
  8. Sample Input
  9. 12 4
  10. 2  1
  11. 3  3
  12. 4  5
  13. 7  9
  14. Sample Output
  15. 15
  16. */
  17. set_time_limit(30);
  18. define(’NOWTIME’,time());
  19. function microtime_float()
  20. {
  21.     list($usec, $sec) = explode(" ", microtime());
  22.     $sec=$sec-NOWTIME;
  23.     return ((float)$usec + (float)$sec);
  24. }
  25. //初始化数组
  26. /*
  27. $bbw=12;
  28. $arywp=array();
  29. $arywp[]=array(’d',2,1);
  30. $arywp[]=array(’c',3,3);
  31. $arywp[]=array(’b',4,5);
  32. $arywp[]=array(’a',7,9);
  33. */
  34. $time_start = microtime_float();
  35. //开始计算
  36. $wpnum=count($arywp);
  37. $wpnum=20; //允许的物品类型数量
  38. $bbw=rand(5*$wpnum,50*$wpnum); //背包允许最大重量
  39. for($i1=0;$i1<$wpnum;$i1++){ //初始化每个物品类型的重量和价值
  40. $arywp[$i1][0]="w".$i1; //名称
  41. $arywp[$i1][1]=rand(50,80); //重量
  42. $arywp[$i1][2]=rand(20,50); //价值
  43. $arywp[$i1][3]=$arywp[$i1][2]/$arywp[$i1][1];//单位重量的最大价值
  44. }
  45. function cmp($a, $b){
  46. $returnvalue=0;
  47.     if ($a[3] == $b[3]) {
  48.   $returnvalue=  0;
  49.     } else {
  50.      $returnvalue = ($a[3] > $b[3]) ? -1 : 1;
  51. }
  52. return $returnvalue;
  53. }
  54. //按单位最大价值排序
  55. usort($arywp, "cmp");
  56. print_r($arywp);
  57. echo " <br />\n";
  58. //递归函数,计算剩余空间的允许物品最大价值
  59. function getmaxval($bbw,$arywp){
  60. //最大单位物品的重量、价值、数量
  61. $use_w=0;
  62. $use_v=0;
  63. $ary_userwp=array();
  64. //当前空间的允许物品最大价值
  65. $maxwgt=0;
  66. $maxval=0;
  67. $maxuserwp=array();

  68. $wp = array_shift($arywp);
  69. $num= floor(($bbw-$use_w)/$wp[1]); //最大单位物品的最大允许个数
  70. //echo " countmax : $num * ".$wp[0]."<br/>\n";
  71. if(count($arywp)==0 || $bbw-$use_w==$wp[1]*$num){ //没有剩余物品或刚好填满 //递归结束条件
  72.   if($num>0){
  73.    $maxwgt+=$wp[1]*$num;
  74.    $maxval+=$wp[2]*$num;
  75.    $maxuserwp[$wp[0]]=$num;
  76.   }
  77. } else {
  78.   for($i=0;$i<=$num;$i++){ //计算最大单位物品不同数量时的最大价值
  79.    $use_w=$wp[1]*$i;
  80.    $use_v=$wp[2]*$i;
  81.    $ary_userwp[$wp[0]]=$i;
  82.    if(($num-$i)*$wp[2]/($bbw-$use_w) < $arywp[0][3]){ //剩余空间的单位价值小于下件物品的单位价值
  83.     list($subuse_w,$subuse_v,$subusewp)=getmaxval($bbw-$use_w,$arywp);
  84.    } else {
  85.     $subuse_w=0;
  86.     $subuse_v=0;
  87.     $subusewp=array();
  88.    }
  89.    if($use_v+$subuse_v>$maxval || $maxval==0){ //比较最大价值
  90.     $maxwgt=$use_w+$subuse_w;
  91.     $maxval=$use_v+$subuse_v;
  92.     if($i>0){
  93.      $maxuserwp=array_merge($ary_userwp,$subusewp);
  94.     } else{
  95.      $maxuserwp=$subusewp;
  96.     }
  97.    }
  98.   }
  99.   //print_r($maxuserwp);
  100.   //echo " maxwgt : $maxwgt  maxval : $maxval<br/>\n";
  101. }
  102. //返回 使用的重量,最大价值、使用的物品数量数组
  103. return array($maxwgt,$maxval, $maxuserwp);
  104. }
  105. //开始计算
  106. $arysulte= getmaxval($bbw,$arywp);
  107. //输出结果
  108. echo " bbw ".$bbw." ";
  109. print_r($arysulte);
  110. $time_end = microtime_float();
  111. $runtime = $time_end – $time_start;
  112. echo " runtime : ".$runtime;
  113. ?>
复制代码
8:设随机抽到A的概率为0.1,B的概率为0.2,C的概率为0.3,D的概率为0.4,现在求按此概率随机抽出一个字母的算法,http://bbs.chinaunix.net/redirec ... 788191&pid=12943384
  1. <?php
  2. /**
  3. * 根据概率取随机数的算法(仅抽取1个)
  4. * 用法:
  5. * $proArr = array(10,20,30,40);
  6. * $result = pro_rand($proArr);
  7. * echo '你抽到的$proArr数组索引是'. $result. ',其预设概率数是'. $proArr[$result];
  8. ** @param array $proArr 概率数组。格式为array('A'=>10, 'B'=>40, 'C'=>50),或者array(10,40,50)。数组的每个键值(value)必须为大于1的整数;所有数组键值(value)加起来即为其总概率精度
  9. * @return mixed $result 结果,将返回抽取到的概率数组索引值。
  10. */
  11. function pro_rand( $proArr ){
  12.     $result = '';

  13.     //概率数组的总概率精度
  14.     $proSum = array_sum($proArr);
  15.    
  16.       foreach ( $proArr as $key => $proCur ){
  17.         $randNum = mt_rand(1, $proSum);
  18.         if( $randNum <= $proCur ){
  19.             $result = $key;
  20.             break;
  21.         }else{
  22.             $proSum -= $proCur;
  23.         }
  24.     }
  25.    
  26.     return $result;
  27.    
  28. }
  29. ?>
复制代码
9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩 http://bbs.chinaunix.net/redirec ... 91&pid=12964560
  1. <?php
  2.         /**
  3.         * 程序说明:总钱数和花去的钱数可以修改,也可以从页面的输入获取。修改相应的值就可以。
  4.         *           这里直接写的值,如果从页面获取可以用$_POST['totalmoney']或者$_GET['totalmoney']
  5.         *           这样的方式从提交页面获取总钱数和花去的钱数。
  6.         *           最后通过计算后,用echo将结果输出到页面。
  7.         */
  8.     $totalmoney=100; //总钱数(美分)
  9.     $consumemoney=11; //花去的钱
  10.     $complet=false; //找钱完成
  11.     $change=0;
  12.     //找零25,10,5,1美分钱的个数
  13.     $ch25 = 0;
  14.     $ch10 = 0;
  15.     $ch5 = 0;
  16.     $ch1 = 0;
  17.     for(;;){
  18.             if ($complet) break;
  19.             $left=$totalmoney - $consumemoney - $change; //还没有找的钱
  20.             if ($left <= 0) {
  21.                 $complet = true;
  22.             }else{
  23.                     if ($left >= 25){  //找25美分钱
  24.                             $change = $change + 25;
  25.                             $ch25 = $ch25 + 1;
  26.                     }else if ($left >= 10 ){//找10美分钱
  27.                             $change = $change + 10;
  28.                             $ch10 = $ch10 + 1;
  29.                     }else if ($left >= 5){//找5美分钱
  30.                             $change = $change + 5;
  31.                             $ch5 = $ch5 + 1;
  32.                     }else{//找1美分钱
  33.                             $change = $change + 1;
  34.                             $ch1 = $ch1 + 1;
  35.                     }
  36.             }           
  37.     }
  38.     echo "剩余零钱 " . ($totalmoney - $consumemoney) . " 美分.<br>";
  39.     echo "找25美分 " . $ch25 . " 个。<br>";
  40.     echo "找10美分 " . $ch10 . " 个。<br>";
  41.     echo "找 5美分 " . $ch5 . " 个。<br>";
  42.     echo "找 1美分 " . $ch1 . " 个。<br>";
  43. ?>
复制代码
10:五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,发现还多一个,它吃掉这桃子,并拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子数最少应该有几个呢? http://bbs.chinaunix.net/redirec ... 91&pid=12961390
  1. <?php
  2.         echo "start";
  3.         for ($y=16;;$y+=4){
  4.                 if (($y-1)%5!=0) continue;
  5.                 $x=$y;
  6.                 for ($i=4;$i>=1&&$x%4==0;$i--){
  7.                         $x=($x/4)*5+1;
  8.                 }
  9.                 if ($i==0){
  10.                         echo "桃子最少应该有:" . $x;
  11.                         break;
  12.                 }
  13.     }
  14. ?>
复制代码
11:公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目。http://bbs.chinaunix.net/redirec ... 788191&pid=12896680
  1. <?php
  2. //11:公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目。
  3. $totalmoney=100;
  4. $totalchicken=100;
  5. $cocknum = intval($totalmoney/3); //100元全买公鸡的数目
  6. $hennum = intval($totalmoney/5); //100元全买母鸡的数目
  7. $biddynum = 100; //100元虽然能买300只小鸡,但因为题意是要买100只鸡。所以小鸡数最大为100
  8. for ($i=1;$i<$cocknum;$i++){ //公鸡数
  9.         for ($j=1;$j<$hennum;$j++){//母鸡数
  10.             for ($k=1;$k<$biddynum;$k++){//小鸡数
  11.                  $money = $i * 3 + $j * 5 + $k / 3;
  12.                  $total = $i + $j + $k;
  13.                  if (($money == $totalmoney) &&($total == $totalchicken)){
  14.                           echo "公鸡:" . $i . "只,母鸡:" . $j ."只,小鸡:" . $k ."只。<Br>";
  15.                  }
  16.             }
  17.         }
  18. }
  19. ?>
复制代码
12:小猴第一天摘下若干枣子,当即吃掉了一半,不过瘾又多吃了一个;第二天吃了剩下的一半又多吃了一个;以后每一天都吃了前一天剩下的一半多一个。到第十天小猴再想吃时,见到只剩下一只枣子了。问第一天这堆枣子有多少?http://bbs.chinaunix.net/redirec ... 788191&pid=12893429
  1. <?php
  2.    //采用倒推算法。
  3.    function getTotal($day){
  4.               $total=0;
  5.               if ($day==1){ //第一天只有一个
  6.                          $total = 1;
  7.               }else{ //以后每一天为前一天的两加上1个。
  8.                          $total = 2*(getTotal($day-1)+1);
  9.               }
  10.               return $total;
  11.    }
  12.    //测试
  13.    echo getTotal(10);
  14. ?>
复制代码
13:有一艘大船准备用来装载货物。所有待装货物都装在货箱中且所有货箱的大小都一样,但货箱的重量都各不相同。设第i 个货箱的重量为wi(1≤i≤n),而货船的最大载重量为c,如何在货船上装入最多的货物。http://bbs.chinaunix.net/redirec ... 91&pid=12968979
  1. <?php
  2.    $arrW=array(1=>W1,2=>W2,.....,n=>Wn);  //这个数组存放的是货物的重量(W1,W2,....Wn为具体数值)
  3.    $c = 10000; //总装载量
  4.    function sortArr($arr){
  5.        if (sizeof($arr)<2) return $arr;
  6.        //先将货物从轻到重排序。
  7.        for ($i=1;$i<=sizeof($arr);$i++){
  8.                   for ($j=$i+1;$j<sizeof($arr);$j++){
  9.                              if ($arr[$i]>$arr[$j]){
  10.                                         $temp = $arr[$i];
  11.                                         $arr[$i] = $arr[j];
  12.                                         $arr[$j]=$temp;
  13.                              }
  14.                   }
  15.        }
  16.        return $arr;
  17.    }
  18.    $arrTemp = sortArr($arrW); //排序
  19.    $arrLoad = array();
  20.    $j = 0;
  21.    for ($i = 1;$i<=sizeof($arrTemp);$i++){
  22.               if ($arrTemp[$i] < $c){ //还有可以装载的地方
  23.                   foreach ($arrW as $key=>$value){
  24.                              if ($value == $arrTemp[$i]){ //找到原始的箱号
  25.                                  $arrLoad[$j] = $key . ":" . $value;                                 
  26.                                  break;
  27.                              }
  28.                   }
  29.                   $j = $j + 1;
  30.                   $c = $c - $arrTemp[$i]; //总装载量减少
  31.               }else{
  32.                          break; //已经没有可以装箱的地方
  33.               }
  34.    }
  35.    print_r($arrLoad); //这就是装箱的结果
  36. ?>
复制代码
14:小球从10米高处自由下落,每次弹起的高度是下落高度的70%,当小球弹起的高度不足原高度的千分之一时,小球很快会停止跳动,计算小球在整个弹跳过程中所经历的总路程(忽略弹起高度不足原高度千分之一的部分)。http://bbs.chinaunix.net/redirec ... 91&pid=12966183
  1. <?php
  2.         /**
  3.         * 参数:$first 出师下落高度
  4.         * 返回:总路程
  5.         */
  6.         function allLength($first){
  7.                 $h = $first; //初始下落高度
  8.                 $s = 0;  //总路程
  9.                 for (;;){
  10.                     $l = 0.7 * $h; //弹起高度。
  11.                     $s = $s + $h + $l;
  12.                     $h = $l; //下次下落高度                    
  13.                     if ($l < ($first / 1000)){ //不足初始高度的1/1000时,退出
  14.                             break;
  15.                     }
  16.                 }
  17.                 return $s;
  18.     }
  19.     //测试
  20.     $home = 10;
  21.     $total = allLength($home);
  22.     echo "总路程是:" . $total . "米。";
  23. ?>
复制代码
15、 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这样的自然数),这个数组中元素的个数。以及大数组中每个元素。如图:
http://bbs.chinaunix.net/redirect.php?goto=findpost&ptid=1788191&pid=12943636
  1. <script language=javascript>
  2. var str = '1|2|3|4|5|6#1|2|3|4#1|2|3|4|5|6|7|8';
  3. var arr=str.split("#"); //分割一维数组
  4. var arrtwo=new Array();
  5. for(var i=0;i<arr.length;i++){
  6. arrtwo[i]=arr[i].split("|"); //分割二维数组。
  7. }
  8. var maxlength=arrtwo[0].length;
  9. var maxarr=1;
  10. //求二维数组最大长度和个数
  11. for (var i=1;i<arrtwo.length;i++){
  12. if (maxlength < arrtwo[i].length){
  13. maxlength = arrtwo[i].length;
  14. maxarr=i+1;
  15. }
  16. }
  17. document.write("最长的二维数组是:"+maxarr);
  18. document.write("<br>长度为:" + maxlength);
  19. //打印数组
  20. for (var i=0;i<arrtwo.length;i++){
  21. document.write("<br>");
  22. for (var j = 0;j<arrtwo[i].length;j++){
  23. document.write(arrtwo[i][j]+",");
  24. }
  25. }
  26. </script>
复制代码
16、假设数据库中有两个表table1和table2,这两个表结构相同,都有三个字段id、name和description,分别存放编号、名称和描述。
现在请做一个页面,包含两个下拉菜单,第一个下拉菜单内是table1中的name,第二个下拉菜单内是table2中的name。下拉菜单的默认值是无,当选择了table1中的任意一个name时,出现一个textarea框显示name对应的description。当选择了table2中的任意一个name时,出现一个textarea框显示name对应的description,并且保留上一个下拉菜单的值和textarea中的值。Textarea中的值可修改,需要做到修改第一个textarea的值,然后更改第二个下拉菜单的值后,第一个textarea中的修改值仍然保留。最后是一个提交按钮,只有按下提交按钮,才会把textarea中的数据才会存入数据库。如图(图省略):
详细解答见:http://bbs.chinaunix.net/redirec ... 91&pid=12971389

17、有一个数组array('a','b','c','d','e','f'),请使用两段代码分别达成图1和图2中的效果。http://bbs.chinaunix.net/redirec ... 91&pid=12952387
图1:

图2:

第一种形式:
  1. <?php
  2. /**
  3.   * 产生第一种形式数组
  4. * 参数:数组
  5. * 返回:数组
  6. */
  7. function generateArray1($arr){
  8.      if (sizeof($arr)<2) return $arr; //如果数组个数只有一个或者0个,返回原始值。
  9.      $r_arr=null;
  10.      for ($i=sizeof($arr) - 2;$i>=0;$i--){
  11.          if ($i == sizeof($arr) - 2){
  12.              $r_arr=array($arr[$i]=>$arr[sizeof($arr)-1]);
  13.          }else{
  14.              $r_arr=array($arr[$i]=>$r_arr);
  15.          }
  16.      }
  17.      return $r_arr;
  18. }
  19. $test_arr=array('a','b','c','d','e','f');
  20. print_r(generateArray1($test_arr));
  21. ?>
复制代码
第二种形式:

  1. <?php
  2. /**
  3.   * 产生第二种形式数组
  4.   * 参数:数组
  5.   *       传入的值
  6.   * 返回:数组
  7.   */
  8. function generateArray2($arr,$value){
  9.      if (sizeof($arr)<1) return $arr; //如果数组个数只有0个,返回原始值。
  10.      $r_arr=null;
  11.      for ($i=sizeof($arr) - 1;$i>=0;$i--){
  12.          if ($i == sizeof($arr) - 1){
  13.              $r_arr=array($arr[$i]=>$value);
  14.          }else{
  15.              $r_arr=array($arr[$i]=>$r_arr);
  16.          }
  17.      }
  18.      return $r_arr;
  19. }
  20. $test_arr=array('a','b','c','d','e','f');  
  21. print_r(generateArray2($test_arr,'Value'));
  22. ?>
复制代码
18、请使用一句话将类似“1910-09-09”的日期各式转换为“一九一零年九月九日”这样的各式。(需要有通用性,是不是一句话不是关键,但不允许使用if\switch\while\for等语句)。http://bbs.chinaunix.net/redirec ... 788191&pid=12877539

使用正则表达式实现
  1. <?php
  2. function convertNumberToChinese($str){
  3.      //先将-替换成年月日
  4.    $pattern='/(\d+)-(0*)([1-9]+)-(0*)([1-9]+)/';
  5.     $replace='${1}年${3}月${5}日';
  6.     $str= preg_replace($pattern,$replace,$str);
  7.     //再将数字替换成汉字
  8.    $patterns=array("/0/","/1/","/2/","/3/","/4/","/5/","/6/","/7/","/8/","/9/");
  9.     $replaces=array("零","一","二","三","四","五","六","七","八","九");
  10.     $re = preg_replace($patterns,$replaces,$str);
  11.     return $re;
  12. }
  13. $str = '1910-09-09';
  14. echo convertNumberToChinese($str)
  15. ?>
复制代码
19、有一张表test,包含四个字段id, question, answer,rank里面有1000条数据。要求做一个页面,随机抽取50道题目(都是单选题),分页显示所有的题目,每页显示1题。按钮包含:第一题—上一页—当前第N题—下一页—最后一题。交卷后将每一题的答案和数据库中的标准答案作比较,相同+2分,最后得出成绩存入rank。 (暂时只实现了生产题目的功能。答题和更新还没有实现) http://bbs.chinaunix.net/redirec ... 91&pid=12966508

20、简述如何得到当前执行脚本路径,包括所得到参数。  http://bbs.chinaunix.net/redirec ... 91&pid=12953380
说明:例如有一个脚本www.domain.com,传给他的参数有参数1,参数2,参数3….
传递参数的方法有可能是GET有可能是POST,那么现在请写出类似
http://www.domain.com/script.php? 参数1=值1&参数2=值2..... 的结果

PHP代码如下,比如文件名是allparam.php
  1. <?php
  2. $query_string = "";
  3. if ($_POST) { //如果是post方法,取得全部post参数及值后进行连接处理
  4.     $kv = array();
  5.     foreach ($_POST as $key => $value) {
  6.         $kv[] = "$key=$value";
  7.     }
  8.     $query_string = join("&", $kv);
  9. }
  10. else { //非post方法,GET等。
  11.     $query_string = $_SERVER['QUERY_STRING'];
  12. }
  13. $execfile=$_SERVER["REQUEST_URI"];
  14. if (strstr($execfile,"?")){ //如果请求URI中包含?则执行文件取?前面的部分
  15.    $execfile = substr($execfile,0,strlen($execfile) - strlen(strstr($execfile,"?")));
  16. }
  17. echo "http://".$_SERVER["SERVER_NAME"].$execfile."?".$query_string;
  18. ?>
复制代码
测试代码,post测试(这个html文件和allparam.php文件在同一个目录里)
  1. <html>
  2.         <head>
  3.                 <title>Param Test </title>
  4.         </head>
  5.         <body>
  6.              <form action="allparam.php" method="post">
  7.                  Name:<input type=text value="" name="name"><br>
  8.                  Addr:<input type=text value="" name="address"><br>
  9.                  <input type=submit value="提交">
  10.              </form>
  11.         </body>
  12. </html>
复制代码
get测试:
  1. http://localhost/allparam.php?c=dd&e=xx
复制代码
21、写出一个能创建多级目录的PHP函数 http://bbs.chinaunix.net/redirec ... 788191&pid=12883652
  1. <?php
  2.     function createdir($path,$mode){
  3.             if (is_dir($path)){  //判断目录存在否,存在不创建
  4.                     echo "目录'" . $path . "'已经存在";
  5.             }else{ //不存在创建
  6.                         $re=mkdir($path,$mode,true); //第三个参数为true即可以创建多极目录
  7.                         if ($re){
  8.                                 echo "目录创建成功";
  9.                         }else{
  10.                                 echo "目录创建失败";
  11.                         }
  12.                 }
  13.         }
  14.         $path="/aa/bb/cc/cd"; //要创建的目录
  15.     $mode=0755; //创建目录的模式
  16.     createdir($path,$mode);//测试
  17. ?>
复制代码
22、有一个留言板,用mysql做数据库 http://bbs.chinaunix.net/redirec ... 91&pid=12953574
用户信息包括:用户名,密码,email   
留言内容包括:留言ID,标题,内容,发表时间,状态(审核,未审核)
请实现下列需求:
1)数据库结构。无需写建表语句,用类似下面的表格,描述清楚即可
表明        table_aaa
字段名        字段说明        字段类型        索引
name        姓名        Varchar(64)        唯一索引
gender        性别        Enum(‘M’,‘F’)        
注意,要在索引栏中注明是否需要创建索引,以及要创建的索引的类型
用一个sql语句查询出发表留言数量大于10条的用户名及其留言数量,查询结果按留言数量降序排列

解答:
用户信息表:
表名:tbl_user
username 用户名 varchar(20) 唯一索引
passwd1  密码 varchar(20)
email        email varchar(100)
留言内容表:
表名:tbl_content
conid 留言ID  int
title   标题 varchar(100)
content 内容 varchar(4000)
devtime 发表时间 datetime
state   状态(审核,未审核) varchar(1)
username 用户名 varchar(20) 可重复索引
   
select username,count(*)
from tbl_content
group by username
having count(*) > 10
order by count(*) desc
23、写出php的public、protected、private三种访问控制模式的区别

public是所有的类中都能访问,protected是只能在本类及继承该类的子类能访问。private只能在本类中访问。

24、 给你三个数,写程序求出其最大值。
  1. <?php
  2.     function getMax($a,$b,$c){
  3.          $max = $a;
  4.          if ($b > $max){
  5.               $max = $b;
  6.          }
  7.          if ($c > $max){
  8.              $max = $c;
  9.          }
  10.          return $max;
  11.     }
  12.     echo getMax(3,2,15);
  13. ?>
复制代码
25、写出查询发贴数最多的十个人名字的SQL,利用下表:http://bbs.chinaunix.net/redirec ... 788191&pid=12880115

members(id,username,posts,pass,email)

我理解posts是发帖量(整型)。所以我的SQL语句如下:
  1. select username from members order by posts desc limit 10;
复制代码
26、如何通过javascript判断一个窗口是否已经被屏蔽。http://bbs.chinaunix.net/redirec ... 91&pid=12953882
  1. <script type="text/javascript" language="javascript">
  2. /**
  3. * 参数说明:url - 要打开的窗口
  4. *                mode - true 模态打开 false 非模态打开
  5. * 返回值:boolean true 没有屏蔽 false 被屏蔽
  6. */
  7. function checkshield(url,mode){
  8.      var breturn = true;
  9.      if (mode){ //模态打开
  10.        if (window.open(url) == false) return false;
  11.      }else{ //非模态打开
  12.        try{
  13.                window.showDialogMode(url);
  14.           }catch (err){
  15.                breturn = false;
  16.           }
  17.      }
  18.      return breturn;
  19. }
  20. </script>
复制代码
27、有一数组 $a=array(4,3,8,9,2);请将其重新排序(按从小到大的顺序列出)。http://bbs.chinaunix.net/redirec ... 788191&pid=12880278

  1. <?php
  2.         $a=array(4,3,8,9,2);
  3.     for($i=0;$i<sizeof($a);$i++){
  4.             for ($j = $i + 1;$j<sizeof($a);$j++){
  5.                     if ($a[$i] > $a[$j]){
  6.                             $itemp = $a[$i];
  7.                             $a[$i]=$a[$j];
  8.                             $a[$j] = $itemp;
  9.                     }
  10.             }
  11.     }
  12.     print_r($a);
  13. ?>
复制代码
28、写出匹配邮箱地址和URL的两个正则表达式。类似下面的:http://bbs.chinaunix.net/redirec ... 788191&pid=12883954
邮箱地址:user_name.first@hztraining.com
URL地址:http://www.hztraining.com/user_profile.php?uid=100
  1. <?php
  2.         //匹配Email
  3.         $pattern='/(\w+)\@(\w+)\.((\w+))+/';
  4.     $email='wangchc_chc.xx@163.xx';
  5.     if (preg_match($pattern,$email))
  6.             echo "match";
  7.     else
  8.             echo "not match";
  9.     echo "<Br>";
  10.     //匹配Url
  11.     $patternurl='/http(s?):\/\/(((\w+)\.)+)(\w+)\/(\w-\.\?\%\&\=)*/';
  12.     $url="http://www.hztraining.com/user_profile.php?uid=100";
  13.     if (preg_match($patternurl,$url))
  14.             echo "match";
  15.     else
  16.             echo "not match";
  17. ?>
复制代码
29、对于大流量的网站,您采用什么样的方法来解决访问量问题? http://bbs.chinaunix.net/redirec ... 788191&pid=12893318

  首先,确认服务器硬件是否足够支撑当前的流量。
  其次,优化数据库访问。
  第三,禁止外部的盗链。
  第四,把持大文件的下载。
  第五,应用不同主机分流重要流量
  第六,应用流量分析统计软件。

30、MySQL数据库,一天一万条以上的增量,怎么优化?http://bbs.chinaunix.net/redirec ... 788191&pid=12893363

首先应该做好mysql基本优化,字段大小,索引;
另外根据具体的需求看有没有必要建立二个一样的表,一个是存储历史数据,一个是当天的或者最近多少天的;
根据日期建立索引这个应该有必要;

31、写个函数来解决多线程同时读写一个文件的问题。http://bbs.chinaunix.net/redirec ... 91&pid=12959126

  1. <?php
  2. /**
  3. * 参数说明:$filename string 操作文件名
  4. *           $content  string 写入文件内容,读时传入空就可以
  5. *           $mode     string r-读 w-写
  6. * 返回值    $retstr   string 返回信息(读取时返回文件内容)
  7. */
  8. function multiAccessFile($filename,$content,$mode){
  9.     $retstr = "";
  10.     if (file_exists($filename) == false) {
  11.         $retstr = "文件不存在";
  12.     }
  13.     if ($mode == "w"){
  14.         $file=fopen($filename,"w+");
  15.         if(flock($file,LOCK_EX))
  16.         {
  17.             fwrite($file,$content);
  18.             flock($file,LOCK_UN);
  19.             $retstr="文件写入成功";
  20.         }
  21.         else{
  22.             $retstr = "文件写入时发生错误";
  23.         }
  24.     }
  25.     if ($mode == "r"){
  26.         $file = fopen($filename,"r");
  27.         if (flock($file,LOCK_EX))
  28.         {
  29.             $retstr = fread($file,filesize($filename));
  30.             flock($file,LOCK_UN);
  31.         }else{
  32.             $retstr = "读取文件时发生错误";
  33.         }
  34.     }
  35.     fclose($file);
  36.     return $retstr;
  37. }
  38. ?>
复制代码
32、一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)http://bbs.chinaunix.net/redirec ... 91&pid=12954958
  1. <?php
  2. /**
  3. *功能:32、一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
  4. *参数:待排序数组
  5. *返回:排序后数组
  6. */
  7. function sortArr($arr){
  8.          if (sizeof($arr)<2) return $arr; //数组元素为1个或者0个,返回。
  9.          /*
  10.           *借鉴冒泡算法,但又和算法不一样。执行次数应该为(n-1)+(n-2)+.....+1次,其他的优化方法暂时没有思路
  11.           */
  12.          for ($i=0;$i<sizeof($arr);$i++){
  13.                   for ($j=$i+1;$j<sizeof($arr);$j++){
  14.                            if ($arr[$i]<$arr[$j]){ //用第一个和后面的比较,保证第一个最大;以此类推,第二个和以后的比较
  15.                                $temp = $arr[$i];
  16.                                $arr[$i] = $arr[$j];
  17.                                $arr[$j] = $temp;
  18.                            }
  19.                   }
  20.          }
  21.          return $arr;
  22. }
  23. //测试
  24. $test_arr=array(10,2,5,1,9,21,13);
  25. print_r(sortArr($test_arr));
  26. ?>
复制代码
33、写一个函数,算出两个文件的相对路径 http://bbs.chinaunix.net/redirec ... 788191&pid=12898932
  如 $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. ?>
复制代码
34、用写一个类实现会员管理,要求实现:
1)用文件存储会员信息,会员注册输入用户名和电子邮件就行。   
2)用户信息包括:用户名,电子邮件。
3)要求用户可以登录、退出和注销用户。
4)如果用户没有退出,下次登录自动显示用户名。
5)保存用户上次浏览时间。
http://bbs.chinaunix.net/redirec ... 91&pid=12966715

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-03 17:23:07综合交流区版块每日发帖之星
日期:2015-08-19 06:20:00综合交流区版块每日发帖之星
日期:2015-09-15 06:20:00
4 [报告]
发表于 2010-09-19 13:11 |只看该作者
这些题目好有意思啊。大家都来投吧。。。。。。。

论坛徽章:
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
5 [报告]
发表于 2010-09-19 14:15 |只看该作者
是应该做做。特别是用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
6 [报告]
发表于 2010-09-19 14:26 |只看该作者
本帖最后由 renxiao2003 于 2010-09-19 22:25 编辑

18、请使用一句话将类似“1910-09-09”的日期各式转换为“一九一零年九月九日”这样的各式。(需要有通用性,是不是一句话不是关键,但不允许使用if\switch\while\for等语句)。

使用正则表达式实现
  1. <?php
  2. function convertNumberToChinese($str){
  3.      //先将-替换成年月日
  4.    $pattern='/(\d+)-(0*)([1-9]+)-(0*)([1-9]+)/';
  5.     $replace='${1}年${3}月${5}日';
  6.     $str= preg_replace($pattern,$replace,$str);
  7.     //再将数字替换成汉字
  8.    $patterns=array("/0/","/1/","/2/","/3/","/4/","/5/","/6/","/7/","/8/","/9/");
  9.     $replaces=array("零","一","二","三","四","五","六","七","八","九");
  10.     $re = preg_replace($patterns,$replaces,$str);
  11.     return $re;
  12. }
  13. $str = '1910-09-09';
  14. echo convertNumberToChinese($str)
  15. ?>
复制代码
23、写出php的public、protected、private三种访问控制模式的区别

public是所有的类中都能访问,protected是只能在本类及继承该类的子类能访问。private只能在本类中访问。

24、 给你三个数,写程序求出其最大值。
  1. <?php
  2.     function getMax($a,$b,$c){
  3.          $max = $a;
  4.          if ($b > $max){
  5.               $max = $b;
  6.          }
  7.          if ($c > $max){
  8.              $max = $c;
  9.          }
  10.          return $max;
  11.     }
  12. ?>
复制代码
25、写出查询发贴数最多的十个人名字的SQL,利用下表:
members(id,username,posts,pass,email)

我理解posts是发帖量(整型)。所以我的SQL语句如下:
  1. select username from members order by posts desc limit 10;
复制代码

论坛徽章:
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
7 [报告]
发表于 2010-09-19 14:29 |只看该作者
是应该做做。特别是用PHP来做。
renxiao2003 发表于 2010-09-19 14:15



    做几道题试试嘛,呵呵

论坛徽章:
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
8 [报告]
发表于 2010-09-19 14:35 |只看该作者
做了两个了。

论坛徽章:
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
9 [报告]
发表于 2010-09-19 14:50 |只看该作者
做了两个了。
renxiao2003 发表于 2010-09-19 14:35



    这么快啊,

论坛徽章:
0
10 [报告]
发表于 2010-09-19 15:04 |只看该作者
,大家赶紧行动起来吧····,奖品很吸引人的哦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP