猴子选大王
一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
private function monkey($n, $m) {
$monkeys = range(1, $n);
$i = 0;
while (count($monkeys) > 1) {
if (($i + 1) % $m == 0) {
unset($monkeys[$i]); // 如果是第 m 个,则踢出去
} else {
array_push($monkeys, $monkeys[$i]); // 如果不是第 m 个,则把这个插入数组尾部
unset($monkeys[$i]);
}
$i++;
}
return current($monkeys);
}
遍历文件夹
/**
* 遍历文件夹
*
* @param $dir
* @return array
*/
public function my_dir($dir) {
$files = array();
if (@$handle = opendir($dir)) { //注意这里要加一个@,不然会有warning错误提示:)
while (($file = readdir($handle)) !== false) {
if ($file != ".." && $file != ".") { //排除根目录;
if (is_dir($dir . "/" . $file)) { //如果是子文件夹,就进行递归
$files[$file] = $this->my_dir($dir . "/" . $file);
} else { //不然就将文件的名字存入数组;
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
杨辉三角
斐波那契数列,兔子繁殖
private function tuzi($n) {
$arr = [1, 1];
if ($n < 2) {
return $arr;
}
for ($i = 2; $i <= $n + 1; $i++) {
$arr[$i] = $arr[$i - 1] + $arr[$i - 2];
}
return $arr;
}
水仙花数
水仙花数:是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
private function shuixianhua() {
$arr = [];
for ($i = 100; $i < 1000; $i++) {
$hundreds = floor($i / 100);//分解出百位
$tens = floor($i / 10) % 10;//分解出十位
$ones = floor($i % 10);//分解出个位
if (pow($hundreds, 3) + pow($tens, 3) + pow($ones, 3) == $i) {
$arr[] = $i;
}
}
return $arr;
}
PHP奇异算法
PHP7以下的版本返回的是 6,PHP7版本返回5
<?php
function test(){
$a=1;
$b=&$a;
echo (++$a)+(++$a);
}
test();
字符集合
输入一个字符串,求出该字符串包含的字符集合,并按顺序排序(英文)
多进程同时写文件
无限级分类
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
获取上个月第一天 和 最后一天
随机输入一个数字能查询到对应的数据区间
用PHP实现一个双向队列
洗牌算法
输出101-200之间的所有素数
输入某年某月某日,判断这一天是这一年的第几天?
算年龄
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
回文数
回文数,个位与万位相同,十位与千位相同,例如:12321是回文数。
参考链接 https://www.cnblogs.com/clubs/p/10373814.html