百度百燈問題
阿新 • • 發佈:2018-07-29
都是 == 題目 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。
百度百燈問題