分享今天面试的三道题
一、模拟扑克发牌,有52张扑克牌,我们给它编号,从1,2,3...52。一共52张牌。请使用数组装载这些牌,然后再打乱顺序输出。比如:43,2,18,21...3。
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
三、假如我们现在要记录下网站中每一个flash小游戏被玩过多少次,每个游戏在一个单独的页面。
(a)请问在玩这些游戏的时候如何记录数据?
(b)如果计算出每个游戏被玩过多少次?(如果使用数据库的话,请写出SQL)
第二题我没答出来。请教下如何实现那个需求。
题量还不错,就三道,不过这些题考的貌似没啥针对性,比那些一写就要写2小时的好多了。
回复讨论(解决方案)
第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。
索引1开始的:
2前缀32 后缀32相等
计算长度最大的即可
$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){ $max = 1; $qq = $tmp; while($qq){ for($i=1,$n = floor((strlen($qq)/2));$i =$max){ $max = $i; } } } $qq = substr($qq,1); } echo $tmp.": ".substr($str,0,$max)."
";
结果:
4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC
第二题
如果不是考算法,也可以简单的用正则反向引用:
$qqNs = array("4323254","22222","5123123","23412341234","2222222");$preg = "/(\d+)(\\1)/";foreach($qqNs as $qq){ if(preg_match($preg,$qq,$res)){ echo $qq.":".substr($str,0,strlen($res[1]))."
"; }}
感谢楼上!!看了你的思路瞬间懂了!
1 索引从1开始,与索引0的做比较,如果相同,匹配向量自增。
2 拿索引0和索引1相连。与索引2与索引3相连的值进行比较,如果相等,匹配向量再自增。
3 如此循环下去到整个QQ号字符串的一半。得到最大自增向量。
最后从字符串数组的头部出栈,再按上述流程计算一遍。。。
不知各位还有其他算法吗?
嗯,当时第一反应就是正则,不过考虑到他出这题应该是考算法。确实没想出来。
不至于吧?全是基础题,不要自己为难自己
一、
$ar = range(1, 54);shuffle($ar);print_r($ar);
二、用正则(既然第一题是基础,那么第二题也不会有过高的要求)
$qq = array('4323254', '5723723');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
)
不至于吧?全是基础题,不要自己为难自己
一、
$ar = range(1, 54);shuffle($ar);print_r($ar);
二、用正则(既然第一题是基础,那么第二题也不会有过高的要求)
$qq = array('4323254', '5723723');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
)
这样的只能固定的号码里弄,如果不固定的,那就没法了
公司名不说了。
一、模拟扑克发牌,有52张扑克牌,我们给它编号,从1,2,3...52。一共52张牌。请使用数组装载这些牌,然后再打乱顺序输出。比如:43,2,18,21...3。
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
三、假如我们现在要记录下网站中每一个flash小游戏被玩过多少次,每个游戏在一个单独的页面。
(a)请问在玩这些游戏的时候如何记录数据?
(b)如果计算出每个游戏被玩过多少次?(如果使用数据库的话,请写出SQL)
第二题我没答出来。请教下如何实现那个需求。
题量还不错,就三道,不过这些题考的貌似没啥针对性,比那些一写就要写2小时的好多了。
第二题是什么意思 AB ABC?怎么我看不懂
在#1代码上扩充一下
$qqs = array('2343232', "4323254","22222","5123123","23412341234","2222222", '123456789');foreach($qqs as $qq) { $len = strlen($qq); $t = array(); echo "qq: $qq:: "; for($i=0; $iqq: 2343232:: AB
qq: 4323254:: AB
qq: 22222:: AAAAA
qq: 5123123:: ABC
qq: 23412341234:: ABCD
qq: 2222222:: AAAAAAA
qq: 123456789:: A 连续号码,留着你自己扩展吧第三题flash和php通信,要在flash那边传参数过来才行。
什么是“只能固定的号码里弄”?
这样的只能固定的号码里弄,如果不固定的,那就没法了第二题是指数字中有连续重复循环的现象,就像循环小数那种:4 323254和5 723723
同理随便几个例子:87 42342398,74 914891489134什么是“只能固定的号码里弄”?
这样的只能固定的号码里弄,如果不固定的,那就没法了
打个比方,用你的那个正则的形式如果再来一个222222的号码,那就不正确了,不可能说来一个号码加一个规则的
$qq = array('4323254', '5723723', '222222');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);得
Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
[2] => ABCABC ABAB 222222
)
有什么不对吗?
$qq = array('4323254', '5723723', '222222');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);得
Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
[2] => ABCABC ABAB 222222
)
有什么不对吗?
当然不对了
222222这个是属于AAAAAA的,怎么算是那2个格式?222222 既符合 ABCABC 的规则,又符合 ABAB 的规则
什么是“只能固定的号码里弄”?
这样的只能固定的号码里弄,如果不固定的,那就没法了
打个比方,用你的那个正则的形式如果再来一个222222的号码,那就不正确了,不可能说来一个号码加一个规则的222222 既符合 ABCABC 的规则,又符合 ABAB 的规则
什么是“只能固定的号码里弄”?
这样的只能固定的号码里弄,如果不固定的,那就没法了
打个比方,用你的那个正则的形式如果再来一个222222的号码,那就不正确了,不可能说来一个号码加一个规则的
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说不错,但题目并没有给出相邻数相同的识别规则,当然就不需要单列了
考虑到一般的需求,所以我才有 #8 的代码$qq = array('4323254', '5723723', '222222');$p = array('/.*(\d\d)\\1.*/', '/.*(\d\d\d)\\1.*/');$r = array('ABAB $0', 'ABCABC $0');$t = preg_replace($p, $r, $qq);print_r($t);得
Array
(
[0] => ABAB 4323254
[1] => ABCABC 5723723
[2] => ABCABC ABAB 222222
)
有什么不对吗?
当然不对了
222222这个是属于AAAAAA的,怎么算是那2个格式?题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码第二题是指数字中有连续重复循环的现象,就像循环小数那种:4 323254和5 723723
同理随便几个例子:87 42342398,74 914891489134
原来是这样 谢谢你回答!无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了
题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了
题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码
呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧我比较好钻牛角
请帮忙检测QQ号码的规则
与
根据号码来找出号码的规则
是一个意思吗?
检测号码的规则,当然是根据已有规则做检测啦!
再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀
无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了
题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码
呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧我比较好钻牛角
请帮忙检测QQ号码的规则
与
根据号码来找出号码的规则
是一个意思吗?
检测号码的规则,当然是根据已有规则做检测啦!
再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀
无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了
题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码
呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧
那你的意思就是说,先列出所有的进可能的规则,然后用号码去里面匹配就完了呗
呵呵
提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则
这句话应该很清楚,“请检测QQ好嘛的规则”
难道说规则已知?
那我确实愚昧了既然是“检测规则”,自然是规则已存在了
我比较好钻牛角
请帮忙检测QQ号码的规则
与
根据号码来找出号码的规则
是一个意思吗?
检测号码的规则,当然是根据已有规则做检测啦!
再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀
无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了
题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码
呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧
那你的意思就是说,先列出所有的进可能的规则,然后用号码去里面匹配就完了呗
呵呵
提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则
这句话应该很清楚,“请检测QQ好嘛的规则”
难道说规则已知?
那我确实愚昧了第三题,可以在游戏开始时,去请求一个php页面,将消息发送至php页面,php页面再去记录玩家玩的信息,如果比如ID,昵称,时间等。也可以直接在flash端使用 socket方式与服务器的服务建立联系。
我记得flash中好像可以调用php页面中的js的,所以访问动态页面地址也是可以的吧。我之前做过flash与aspx页面的交互,做flash抽奖模块时。
动态页面端如果执行成功就write("success=1"),这时flash中一可以收到success的值,也可以不用在动态页面端输出这些字符串(若flash端不需要知道执行结果的情况)
既然是“检测规则”,自然是规则已存在了
我比较好钻牛角
请帮忙检测QQ号码的规则
与
根据号码来找出号码的规则
是一个意思吗?
检测号码的规则,当然是根据已有规则做检测啦!
再说“根据号码来找出号码的规则”也应该是“根据号码来找出号码的 规律”呀
无论是多少的号码,但规则总是不变的。如果在一给定的条件之外增加自己臆想的条件,那就是蛇足了
考试嘛,按题意解答就是了
题目是:
二、公司要和QQ合作,提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则。如4323254,规则为:ABAB。5723723,规则为ABCABC。
一般不应在题目之外附加条件吧?
还有如果只是22222呢?那你说他是ABAB形式?
那我只能说汗颜,无话可说
那是你不理解题目而已
人家题目都说是任意的号码,后面2个后面只是打一个比方而已,并不是只是2个号码
呵呵,那我无话可说,人家这题都声明了根据号码来找出号码的规则,并不固定,你却说那是自己臆测,自己加条件,当我啥都不懂,啥都没说吧
那你的意思就是说,先列出所有的进可能的规则,然后用号码去里面匹配就完了呗
呵呵
提供接口给QQ,会发QQ号过来。请帮忙检测QQ好嘛的规则
这句话应该很清楚,“请检测QQ好嘛的规则”
难道说规则已知?
那我确实愚昧了
跟你讨论没意义,如果是已知规则,人家就不需要叫你去检测,而是叫你写程序来匹配并且告诉你规则了
没必要跟你讨论这个下去,你喜欢钻文字牛角尖你就去钻吧
这道题纯粹就是考简单的算法而已,写一个简单的算法能检测任意一个号码的规则
这三道题
第一题主要考的是数组的运用
第二题考的是算法
第三题考的是flash与php的通信第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。
索引1开始的:
2前缀32 后缀32相等
计算长度最大的即可$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){ $max = 1; $qq = $tmp; while($qq){ for($i=1,$n = floor((strlen($qq)/2));$i =$max){ $max = $i; } } } $qq = substr($qq,1); } echo $tmp.": ".substr($str,0,$max)."
";
结果:4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC
你好问一下里面的while($qq)怎么不是死循环啊
第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。
索引1开始的:
2前缀32 后缀32相等
计算长度最大的即可$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){ $max = 1; $qq = $tmp; while($qq){ for($i=1,$n = floor((strlen($qq)/2));$i =$max){ $max = $i; } } } $qq = substr($qq,1); } echo $tmp.": ".substr($str,0,$max)."
";
结果:4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC
你好问一下里面的while($qq)怎么不是死循环啊
...
每次循环完,$qq的位数都减一位,怎么会死循环啊?$qq = substr($qq,1);他不是有 $qq = substr($qq,1); 吗?
每次去掉第一个字符,直到为空
第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。
索引1开始的:
2前缀32 后缀32相等
计算长度最大的即可$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){ $max = 1; $qq = $tmp; while($qq){ for($i=1,$n = floor((strlen($qq)/2));$i =$max){ $max = $i; } } } $qq = substr($qq,1); } echo $tmp.": ".substr($str,0,$max)."
";
结果:4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC
你好问一下里面的while($qq)怎么不是死循环啊
怎么会是死循环呢?
while的用法你了解么?
不过他这个算法写的有点?嗦而已
第二题思路:
对于每个qq,判断qq的前缀和后缀。树的长度从0 - strlen/2
如4323254
索引0开始的:
1位前缀:4,后缀3 不等
2位前缀:43 后缀23 不等
3位前缀的:432后缀325 不等
。。。
索引1开始的:
2前缀32 后缀32相等
计算长度最大的即可$qqNs = array("4323254","22222","5123123","23412341234","2222222");$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";foreach($qqNs as $tmp){ $max = 1; $qq = $tmp; while($qq){ for($i=1,$n = floor((strlen($qq)/2));$i =$max){ $max = $i; } } } $qq = substr($qq,1); } echo $tmp.": ".substr($str,0,$max)."
";
结果:4323254: AB22222: AB5123123: ABC23412341234: ABCD2222222: ABC
你好问一下里面的while($qq)怎么不是死循环啊
怎么会是死循环呢?
while的用法你了解么?
不过他这个算法写的有点?嗦而已
呵呵,多谢涉及到规则,一般都会有标准的争论。
#2要考虑对称的情况,比如445445,44554455,这些都应该是AB?#3是一个高并发计数器+nosql的应用场景,how about nodejs+redis?
涉及到规则,一般都会有标准的争论。
#2要考虑对称的情况,比如445445,44554455,这些都应该是AB?
这种情况确实是忘记考虑了,#1的也忽略了2222这种应该是AAAA的规则。flash如何与php通信呢?
第三道题没有人讨论吗?第一道题,应该用链表最适合了。
还有很多其他的办法,但是都显得比较臃肿。
第二到题,没有好办法。、
第三道题,用js?学习了
学到一个词 高并发计数器
用缓存来计数之后再存入数据库 这么简单的思路之前没想到 悲剧flash如何与php通信呢?
第三道题没有人讨论吗?
1.利用页面刷新,存在session
2.借助xml通信第二题反了吧,应该是QQ提供公共API,然外面的人调用。不然来一个公司就要响应一个接口,腾讯的人不累死,也不符合软件是设计思想
看这帖子我是明白了两点:
1.是都是从应试教育走过来的,考题贴不论题目难易,总能吸引相当多的人
2.是几十年来总算见到个比我脾气还犟的人,哈哈
第二题我想到的是,最小编辑距离,偶算法弱,就不参与讨论了第二题,综合前面各位大大,简单写下,欢迎给意见
function gz($qq){ $len = strlen($qq); $str = "ABCDEFG"; $ret = '无规则'; $first = substr($qq,0,1); if($len==substr_count($qq,$first)) return 'AA'; for($i=0;$i';echo gz('6521218').'
';echo gz('8712312369').'
';echo gz('881881');
运行结果:AAABABABCABCABCABC看这帖子我是明白了两点:
1.是都是从应试教育走过来的,考题贴不论题目难易,总能吸引相当多的人
2.是几十年来总算见到个比我脾气还犟的人,哈哈
第二题我想到的是,最小编辑距离,偶算法弱,就不参与讨论了不是很懂,知识学习学习
第二题我也没有想出来。。其他还好呢。如果仅是:4323254,规则为:ABAB。5723723,规则为ABCABC的话还是蛮简单。如果有33224556 AABB 22222 AAAAA的话就麻烦了
学习了,是很有用的面试方法,也是大家要学习的面试技巧。
C# 第一题
上一篇: 有关stack的文章推荐10篇
下一篇: php中or ,and的功用及使用