龙空技术网

最经典的算法,献给正在面试道路上的你

自学PHPer 531

前言:

现在小伙伴们对“php经典算法题”大概比较关切,你们都想要分析一些“php经典算法题”的相关内容。那么小编在网上汇集了一些关于“php经典算法题””的相关文章,希望姐妹们能喜欢,咱们快快来学习一下吧!

1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

2、有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛

3、杨辉三角

4.冒泡排序

5.快速排序

6.二分查找算法(折半查找算法)

7.PHP奇异算法

8.字符集合:输入一个字符串,求出该字符串包含的字符集合,并按顺序排序(英文)

9.遍历一个文件下的所有文件和子文件夹下的文件

10.从一个标准的Url提取出文件的扩展名

11.有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?例如:总共3级台阶,可以先迈1级再迈2级,或者先迈2级再迈1级,或者迈3次1级总共3中方式

12.请写一段PHP代码,确保多个进程同时写入同一个文件成功

13.无限级分类

14.获取上个月第一天 和 最后一天

15.随机输入一个数字能查询到对应的数据区间

16,现在有一个字符串,你要对这个字符串进行 n 次操作,每次操作给出两个数字:(p, l) 表示当前字符串中从下标为 p 的字符开始的长度为 l 的一个子串。你要将这个子串左右翻转后插在这个子串原来位置的正后方,求最后得到的字符串是什么。字符串的下标是从 0 开始的,你可以从样例中得到更多信息。

每组测试用例仅包含一组数据,每组数据第一行为原字符串,长度不超过 10 ,仅包含大小写字符与数字。接下来会有一个数字 n 表示有 n 个操作,再接下来有 n 行,每行两个整数,表示每次操作的(p , l)。

保证输入的操作一定合法,最后得到的字符串长度不超过 1000。

17,你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?

每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000

18 用PHP实现一个双向队列

19 请使用冒泡排序法对以下一组数据进行排序10 2 36 14 10 25 23 85 99 45。

20 写出一种排序算法(要写出代码),并说出优化它的方法。

21 洗牌算法

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

2 就是第三个数是前两个数字的和,既是经典的菲波那切数列

【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数。

【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

【程序4】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

1.程序分析:(a> b)?a:b这是条件运算符的基本例子。

【程序5】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

1.程序分析:关键是循环获得计算出每一项的值。

2. 可以使用php的str_repeat函数

【程序6】题目:一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?

1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:

刚开始不知道怎么判断一个数字是否为完全平方数,但是根据php的基本函数sqrt和pow可以间接进行判断

若开方后进行取整再平方等于原数字,那么这个数字则为一个完全平方数,根据这个方法进行判断

public function actionWhitchNum()

{

for ($i=1;$i<=100000;$i++)

{

if(pow((int)sqrt($i+100),2) == ($i+100) &&pow((int)sqrt($i+168),2) == ($i+168) )

{

echo $i;

}

}

echo 'ok';

}

【程序7】 题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 刚开始看这题以为有什么简单的方法,但是我没有想到,没有办法,只能用这种方法了

【程序8】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。

这里不把排序当做考察点,排序的话可以使用冒泡,快速,插入等排序算法,这里使用了三种交换变量的方式,我感觉这才是重要的

【程序9】 题目:输出9*9口诀。

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

【程序10】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

1.程序分析:请抓住分子与分母的变化规律。

【程序11】 题目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加变成了累乘。

【程序12】 题目:利用递归方法求5!。

1.程序分析:递归公式:fn=fn_1*4!

【程序13】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

【程序14】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

【程序15】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

标签: #php经典算法题