java算法之燈的開關問題

燈的開關問題:

初始狀態,有100盞燈,都是亮的。
第一輪,第1,2,3,4,5,6....100盞燈按一下開關。                     1的倍數
第二輪,第2,4,6,8,10......100盞燈按一下開關。         2的倍數
第三輪,第3,6,9,12,15......99盞燈按一下開關。            3的倍數
。。。。。
第100輪,第100盞燈按一下開關。                100的倍數
問,哪些燈是亮着的?


思路:

這個問題,其實之前我專門做過,最後也相通了,可是剛開始看的時候,就沒有很快的有思路,當然也可能是思考時間太短了,這個題應該是個經典問題,當學長提出來之後,很快就有學生上去進行了講解。這也說明了,我真的還很弱,還和大佬存在很大的差距,要繼續加油。

迴歸正題:

這個問題可以轉換成求因子分解的個數,就是判斷每一盞燈,會被按幾次。這樣按偶數次數的燈,開關狀態不變,按奇數次數的燈,開關變成原來的相反的狀態。

舉個例子:

第6盞燈: 6=1×6,6=2×3,這樣就說明,第6盞燈在第一輪,第二輪,第三輪,第六輪,都會被按一次,除了這幾次之外,第六盞燈不會在改變它的開關狀態,所以我們可以看到,第6盞燈一共被按裏偶數次,所以第6盞燈,最後的狀態是亮着的。

第25盞燈:25=1×25,25=5×5,說明,第25盞燈,在第一輪,五輪,二十五輪各被按一次,總共按裏奇數次,所以最後的狀態是,關着的。

因此這個題,就轉換成了求因式分解個數的問題:

那麼有什麼方法可以求因式分解呢?目前腦袋裏的第一想法是暴力,可是暴力求解,如果因式分解也用暴力的話,那還不如直接在原問題上用暴力求解。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章