問題提出:
有編號1~100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。
現在開始按開關。
第1個同學,把所有的燈泡開關都按一次(按開關燈的編號:1,2,3,......100)。
第2個同學,隔乙個燈按一次(按開關燈的編號:2,4,6,......,100)。
第3個同學,隔兩個燈按一次(按開關燈的編號:3,6,9,......,99)。
問題是,在第100個同學按過之後,有多少盞燈是亮著的?
解決思路:
明顯這是乙個奇偶問題,乙個燈 奇數次是亮著的,偶數次就滅了。
那這個問題就變成了乙個判斷奇數偶數的數學問題。
先最簡單的思路,模擬這個過程,light[i][j]代表第 i 個人按了第 j 個燈,直接上**:
/* linolzhang 2008.05
*/// 蒐集過程
int light[100][100];
for(int i=0;i<100;i++)
for(int j=0;j<100;j++)
if(j%i == 0)
// 累加過程(j列對應和為偶數為滅)
int statu[100] = ;
for(int j=0; j<100; j++)
感覺這個問題已經很完美的解決了?
*也許不是,你應該有更好的思路。
light 1 只會被第1個同學按;
light 2 只會被第1個同學和第2個同學按;
light 3 只會被第1個同學和第3個同學按;
light 4 只會被第1個同學、第2個同學以及第4個同學按;
light n 只會被第1個同學、……、第n個同學按;
找到規律了嗎?沒錯,這是乙個簡單的因式分解題,只需要求 該序號n 能被哪些數整除?
int getcount(int num)
{ int count = 0; // 因子個數
for(int i=1;i
*那還有沒有第三種解法呢?有
接著上面來看,什麼樣的編號具有奇數個因子,什麼樣的編號具有偶數個因子?來看 質因數分解的定理:
任何正數都能被唯一表示成多個質因數冪次乘積的方式。
36 = 2^2 * 3^2(2、3、6)
64 = 2^3 * 2^3 (2、4、8、16、32)
99 = 3^2 * 11 (3、9、33、11)
我們得到結論,只有指數和為偶數次的 其因子才會是奇數個,那麼滿足這個條件的是哪些呢?
必須滿足完全平方數。
ok,我們得到結論,1~100中完全平方數有 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 ,這10個編號的燈是亮著的。
數學回味系列之3 賽馬問題
問題提出 共有25匹馬,有乙個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定 可多次比賽 只通過馬與馬之間的比賽,沒有計時器,試問,最少需要多少場比賽才能知道跑得最快的3匹馬?解題思路 根據題目,我們首先想到的就是 1 隨機分成5組,各5匹馬,5場比賽得到 各組第1...
數學回味系列之13 殺豬問題
問題提出 有 n 頭豬 和 乙個 的屠夫 屠夫就喜歡殺單數字置上的豬,一次殺完之後,將剩下的豬按照原來的相對位置,重新排列 按照約定,最後一頭豬 取名lucky 將會被送到教堂,這是神的旨意。請問,最聰明的豬應該站在哪個位置,才能成為這個幸運兒?解題思路 分析這個問題,我們發現,奇數字是危險的,每一...
數學回味系列之10 高樓扔雞蛋
問題提出 有座100層的建築,雞蛋從某一層扔下來有可能摔碎 可能是,也可能是 你手上有兩個軟硬程度一樣的雞蛋,要判斷出來哪一層是雞蛋可以安全落下的最高位置。最少需要扔多少次?解題思路 最笨的方法,從1層開始,每層都扔1次,直到摔碎 為止,得到當前當前層數 n。最差需要100次 好像只需要乙個雞蛋就夠...