1. 程式人生 > >百度百燈問題

百度百燈問題

都是 == 題目 del 3的倍數 拉動 結束 ash 輸出

題目:

有100盞燈泡,第一輪點亮所有電燈,第二輪每兩盞燈熄滅一盞,即熄滅第2盞,第4盞,以此類推,
第三輪改變編號為3的倍數的電燈,第3盞,第6盞,如果原來那盞燈是亮的,就熄滅它,如果原來是滅的,
就點亮它,以此類推,直到第100輪。問第100結束後,還有多少盞燈泡是亮的?

思路:

燈的編號越大,被操作的次數就會越多。例如:第5次操作的時候,前4盞燈就不會再被操作了,第5盞及後面的燈才有可能被操作。

對於每盞燈,操作的次數是奇數次,燈就是亮的;操作的次數是偶數次,等就是滅的。

每盞燈被操作的次數等於等所在位置編號的約數的個數。(約數的個數要想是奇數,只能是完全平方數。)

若 a>=b ,a%b == 0 。則b是a的約數。

代碼:

for i in range(1,101):     # i 為燈的位置數
    k=0                    #記錄第i盞燈被操作的次數
    for j in range(1,i+1): # j 為操作的次數
        if i%j==0:         #當操作的次數,是燈位置數的約數時,燈才會被操作
            k+=1           #記錄燈被操作的次數
    if k%2==1:             #被操作次數為奇數的燈是亮的
        print(i)

輸出結果:

1
4
9
16
25
36
49
64
81
100

總結:

1.對於每盞燈,拉動的次數是奇數時,燈就是亮著的,拉動的次數是偶數時,燈就是關著的。

2.每盞燈拉動的次數與它的編號所含約數的個數有關,它的編號有幾個約數,這盞燈就被拉動幾次。

3.1——100這100個數中有哪幾個數,約數的個數是奇數。我們知道一個數的約數都是成對出現的,

只有完全平方數約數的個數才是奇數個。

所以這100盞燈中有10盞燈是亮著的。

它們的編號分別是: 1、4、9、16、25、36、49、64、81、100。

百度百燈問題