• ebay笔试题2012年10月13号(你能做出几道)


    ebay的逻辑题出的很好,很费脑子,我把记忆深的几道题写出来,对我算是总结,大家可以看看能做出来几道。

    1.某个数除以2 1 ,除以3 1,除以。。。。除以10 1,除以110,求这个数最小为多少

    2.1000盏灯,初始状态全灭;1000个开关,第一个开关改变所有11的倍数的灯的状态,第二个开关改变所有22的倍数的灯的状态……直到第1000个开关。
    1000个开关都执行一遍之后,哪些灯亮着?

    3.10个圆最多可以把平面分成多少部分?

    4.1*2*3....*100得到的数有几个0

    /*****************************************

    ***********************************************************************/

    2012-10-13 ebay

    1.某个数除以2 1 ,除以3 1,除以。。。。除以10 1,除以110,求这个数最小为多少。

    答:首先这个数是2345678910的最小公倍数+1.求最小公倍数的方法如下:

    /——————————————————————————————/

    首先把两个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积(如果有几个质因数相同,则比较两数中哪个数有该质因数的个数较多,乘较多的次数)。 
    比如求4530的最小公倍数。 
    45=3*3*5 
    30=2*3*5 
    不同的质因数是2,3,53是他们两者都有的质因数,由于45有两个330只有一个3,所以计算最小公倍数的时候乘两个3. 
    最小公倍数等于2*3*3*5=90 
    
    又如计算36270的最小公倍数 
    36=2*2*3*3 
    270=2*3*3*3*5 
    不同的质因数是52这个质因数在36中比较多,为两个,所以乘两次;3这个质因数在270个比较多,为三个,所以乘三次。 
    最小公倍数等于2*2*3*3*3*5=540 
    2040的最小公倍数是40

    /————————————————————————/

    所以,求出最小公倍数为2520.那个数就是2520k+1,然后给k赋不同的值,看能不能除尽11,最后所25201,这个地方没想到好方法。


    2.1000盏灯,初始状态全灭;1000个开关,第一个开关改变所有11的倍数的灯的状态,第二个开关改变所有22的倍数的灯的状态……直到第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

    答:

    /————————————————————————————/

    110,连续10个整数相乘: 
    1×2×3×4×5×6×7×8×9×10
    连乘积的末尾有几个0
    答案是两个0。其中,从因数10得到10,从因数25相乘又得到10,共计两个。 
    刚好两个0?会不会再多几个呢? 
    如果不相信,可以把乘积计算出来,结果得到 
    原式=3628800。你看,乘积的末尾刚好两个0,想多1个也没有。 
    那么,如果扩大规模,拉长队伍呢?譬如说,从1乘到20
    1×2×3×4×…×19×20。这时乘积的末尾共有几个0呢? 
    现在答案变成40。其中,从因数10得到10,从20得到10,从52相乘得到10,从154相乘又得到10,共计40
    刚好40?会不会再多几个? 
    请放心,多不了。要想在乘积末尾得到一个0,就要有一个质因数5和一个质因数2配对相乘。在乘积的质因数里,2多、5少。有一个质因数5,乘积末尾才有一个0。从1乘到20,只有5101520里面各有一个质因数5,乘积末尾只可能有40,再也多不出来了。 
    把规模再扩大一点,从1乘到30
    1×2×3×4×…×29×30。现在乘积的末尾共有几个0
    很明显,至少有60
    你看,从130,这里面的51015202530都是5的倍数。从它们每个数可以得到10;它们共有6个数,可以得到60
    刚好60?会不会再多一些呢? 
    能多不能多,全看质因数5的个数。255的平方,含有两个质因数5,这里多出15来。从1乘到30,虽然30个因数中只有6个是5的倍数,但是却含有7个质因数5。所以乘积的末尾共有70
    乘到30的会做了,无论多大范围的也就会做了。 
    例如,这次乘多一些,从1乘到100
    1×2×3×4×…×99×100。现在的乘积末尾共有多少个0

    ——————————————————

    能分解出多少个5,就有多少个零,

    100÷5=20
    100÷25=4
    当然24个。
    /—————————————————————————————————————————————————————————————————/
  • 相关阅读:
    Go module学习笔记
    java并发基础及原理
    java并发之内存模型
    https理论及实践
    Mysql查询结果导出Excel表
    mysql清空表数据并重置自增ID
    html a标签链接点击闪动问题解决
    rocketmq-console控制台管理界面配置
    nginx多层反代配置变量proxy_set_header
    nginx 实现浏览器文件下载服务
  • 原文地址:https://www.cnblogs.com/xioyaozi/p/2722800.html
Copyright © 2020-2023  润新知