有点意思的编程题(一)


反正我觉得有意思的题,有空就整理整理放进来吧,长期更。


1. 有50个人(编号1-50)围成一个圈,从第一个开始数,数道7,踢出这个人,然后接着往下循环数。直到剩下最后一个为止,请问这个的编号是几?

这是个约瑟夫环,更多请看: 约瑟夫环-百度百科

/**
 * (约瑟夫环)
 * @param  int    $n 总人数,从1开始编号
 * @param  int    $m 数道几踢人
 * @return int       幸运儿编号
 */
function shu($n,$m){
	$arr=range(1,$n);//创建数组
	$i=0;
	while(count($arr)>1){
		$i+=1;//开始查数
		$head=array_shift($arr);//将数组开头的单元移出数组 返回被移除的元素,数组为引用关系
		if($i%$m!=0){
			array_push($arr,$head);//将一个或多个单元压入数组的末尾(入栈)
		}
	}
	return $arr[0];
}
echo "幸运儿编号:".shu(50,7);

简单分析下:

$arr为根据传入的总人数$n,创建的1到$n的整数数组,即给每个人编号。

while条件是当$arr等于1时则跳出循环,结束函数,返回幸运儿编号。

循环中,$i其实就是数道几,先使用array_shift函数得到$arr的第一个元素。

如果$i刚好是$m倍数,那么就踢掉这个数,否则就把这个元素,重新放入$arr的末尾,即循环数之意。


2. 使用python一行代码打印乘法口诀表。

print ('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

python的列表生成式语法。

显示最后部分从 range(1,10),就是1~9的列表集合中循环取值赋值给x。

接着的range(1,x+1) 就灵活的使用了上面的x

然后就是使用%格式化字符串了,&-2s表示占2位。

最后使用 join 函数将集合链接成字符串,配置空格字符串和换行符形成乘法口诀表的格式。


3. mysql,写出查询A表中a1字段 Like B表中b1字段,并且 A.a2 = B.b2 的所有记录的SQL。

SELECT * FROM A,B WHERE A.a2=B.b2 AND A.a1 LIKE CONCAT("%",B.b1,"%");

CONCAT()函数用于将多个字符串连接成一个字符串


4. 从文章标签关联表中取出关联文章篇数小于2的标签,并得到总数量做分页。

文章标签关联表 taglist 

1

tid 为标签id, aid 为 文章id

取出关联文章篇数小于2的标签

SELECT tid,aid,COUNT(*) as aids FROM taglist  GROUP BY tid HAVING aids < 2 ORDER BY tid ASC;

这边就是用tid进行分组,然后关于COUNT(*)就是同个标签id关联的文章篇数了.别名 aids ,在 HAVING 中是可以作为条件的。

取得分组筛选后的总记录数

SELECT COUNT(*) FROM(SELECT COUNT(*) as aids FROM taglist  GROUP BY tid HAVING aids < 2) as a;

SELECT COUNT(*) FROM(子查询) [AS] 子查询的别名


5. 看图,写出符合要求的SQL

微信图片_20180628104959

答案:

SELECT score,((SELECT count(DISTINCT(score)) FROM score WHERE score > s.score)+1) AS RANK FROM score AS s ORDER BY s.score DESC;



记录点想法,可能弄成题目

1. left join 多表集合

select * FROM dc_device AS a LEFT JOIN 

(

select * from dc_device_manholecover

union 

select * from dc_device_dustbin

union

SELECT * from dc_device_smoke

) as tmp ON a.id = tmp.device_id ORDER BY a.id ASC ;


6. 批量杀死进程的命令,比如所有和ffmpeg相关的

ps -ef|grep ffmpeg|awk '{print $2}'|xargs kill -9


skill


上一篇:项目开发上线中一些注意点(备忘)

Windows搭建nginx和php环境(支持php多版本切换):下一篇