ebay笔试题2012年10月13号(你能做出几道)
ebay的逻辑题出的很好,很费脑子,我把记忆深的几道题写出来,对我算是总结,大家可以看看能做出来几道。
1.某个数除以2 余1 ,除以3 余 1,除以。。。。除以10 余1,除以11余0,求这个数最小为多少
2.有1000盏灯,初始状态全灭;1000个开关,第一个开关改变所有1和1的倍数的灯的状态,第二个开关改变所有2和2的倍数的灯的状态……直到第1000个开关。
当1000个开关都执行一遍之后,哪些灯亮着?
3.10个圆最多可以把平面分成多少部分?
4.1*2*3....*100得到的数有几个0?
/*****************************************
以
下
是
答
案
***********************************************************************/
2012-10-13 ebay
1.某个数除以2 余1 ,除以3 余 1,除以。。。。除以10 余1,除以11余0,求这个数最小为多少。
答:首先这个数是2,3,4,5,6,7,8,9,10的最小公倍数+1.求最小公倍数的方法如下:
/——————————————————————————————/
首先把两个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积(如果有几个质因数相同,则比较两数中哪个数有该质因数的个数较多,乘较多的次数)。 比如求45和30的最小公倍数。 45=3*3*5 30=2*3*5 不同的质因数是2,3,5。3是他们两者都有的质因数,由于45有两个3,30只有一个3,所以计算最小公倍数的时候乘两个3. 最小公倍数等于2*3*3*5=90 又如计算36和270的最小公倍数 36=2*2*3*3 270=2*3*3*3*5 不同的质因数是5。2这个质因数在36中比较多,为两个,所以乘两次;3这个质因数在270个比较多,为三个,所以乘三次。 最小公倍数等于2*2*3*3*3*5=540 20和40的最小公倍数是40
/————————————————————————/
所以,求出最小公倍数为2520.那个数就是2520k+1,然后给k赋不同的值,看能不能除尽11,最后所25201,这个地方没想到好方法。
2.有1000盏灯,初始状态全灭;1000个开关,第一个开关改变所有1和1的倍数的灯的状态,第二个开关改变所有2和2的倍数的灯的状态……直到第1000个开关。
当1000个开关都执行一遍之后,哪些灯亮着?
解答:
如果是不考虑数学,直接编程,那么建立一个拥有1000个标志位的数组,使用for循环对1000个开关和1000个灯进行遍历,标志初识为0,改变状态时在0/1切换。最后状态为1的位,灯亮。
当然这种算法复杂度相当高O(N²),并不是理想的解决方案。
如果先进行数学分析,第N个灯,将N进行因式分解,无非是N=
1*N =
2*(N/2)...,那么该灯在第1、第n、第2、第n/2……的开关执行的时候,灯的状态改变;可以发现均为成对出现,那么灯的最终状态是不变的。当然也有例外,那就是当N为完全平方数,即N=m*m的时候,此时存在奇数个开关控制灯的状态,那么最终该灯会是亮的。好了,到这里,程序会变得很简单,寻找1000之内所有的完全平方数,这些灯最终都会是开着的。(答案来自百度搜索,问题来自一位牛X的腾讯内部招聘官,不肯告知答案)
答案就是31个,32*32=1024.
3.n个圆最多可以把平面分成多少部分?
设n个圆最多可以把平面分成S(n)个部分。 则可得: S(1)=2; S(2)=4; ... 前n-1个圆最多将平面分成S(n-1)个部分,此时,对于第n个圆来说,它与先前的n-1个圆最多有2(n-1)个交点,即此第n个圆最多被这2(n-1)个交点分成2(n-1)条圆弧段。由于每增加一个圆弧段,便可将原来的某个区域分为两个区域(此处最好看图分析)。因此,第n个圆使平面增加了2(n-1)个区域。因此可得递推关系式: S(n)=S(n-1)+2(n-1), 其中n大于等于2。 由此递推关系式得到: S(n)=S(1)+2*1+2*2+...+2*(n-1)=2+n*(n-1)=n^2-n+2; 即n个圆最多可以把平面分成(n^2-n+2)个部分。(可以自己手动验证一下,答案应该是正确的)
扩充题:n条直线可将平面最多分成几部分?
答:1条直线最多分成2个部分 2条直线最多分成4个部分 3条直线最多分成7个部分 有n-1条直线时,增加一条直线,最多与原来的n-1条直线都相交,增加n部分 所以, n条直线最多分成 1+1+2+3+4....+n=1+n*(n+1)/2
4.1*2*3....*100最后的数有几个0?
/————————————————————————————/
从1到10,连续10个整数相乘: 1×2×3×4×5×6×7×8×9×10。 连乘积的末尾有几个0? 答案是两个0。其中,从因数10得到1个0,从因数2和5相乘又得到1个0,共计两个。 刚好两个0?会不会再多几个呢? 如果不相信,可以把乘积计算出来,结果得到 原式=3628800。你看,乘积的末尾刚好两个0,想多1个也没有。 那么,如果扩大规模,拉长队伍呢?譬如说,从1乘到20: 1×2×3×4×…×19×20。这时乘积的末尾共有几个0呢? 现在答案变成4个0。其中,从因数10得到1个0,从20得到1个0,从5和2相乘得到1个0,从15和4相乘又得到1个0,共计4个0。 刚好4个0?会不会再多几个? 请放心,多不了。要想在乘积末尾得到一个0,就要有一个质因数5和一个质因数2配对相乘。在乘积的质因数里,2多、5少。有一个质因数5,乘积末尾才有一个0。从1乘到20,只有5、10、15、20里面各有一个质因数5,乘积末尾只可能有4个0,再也多不出来了。 把规模再扩大一点,从1乘到30: 1×2×3×4×…×29×30。现在乘积的末尾共有几个0? 很明显,至少有6个0。 你看,从1到30,这里面的5、10、15、20、25和30都是5的倍数。从它们每个数可以得到1个0;它们共有6个数,可以得到6个0。 刚好6个0?会不会再多一些呢? 能多不能多,全看质因数5的个数。25是5的平方,含有两个质因数5,这里多出1个5来。从1乘到30,虽然30个因数中只有6个是5的倍数,但是却含有7个质因数5。所以乘积的末尾共有7个0。 乘到30的会做了,无论多大范围的也就会做了。 例如,这次乘多一些,从1乘到100: 1×2×3×4×…×99×100。现在的乘积末尾共有多少个0?
——————————————————
能分解出多少个5,就有多少个零,
100÷5=20 100÷25=4 当然24个。 /—————————————————————————————————————————————————————————————————/