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個。 /—————————————————————————————————————————————————————————————————/