演算法題 燈泡開關問題

2022-08-09 15:09:16 字數 903 閱讀 5369

問題描述: 有編號1~100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。

現在開始按開關。

第1個同學,把所有的燈泡開關都按一次(按開關燈的編號: 1,2,3,......100)。

第2個同學,隔乙個燈按一次(按開關燈的編號: 2,4,6,......,100)。

第3個同學,隔兩個燈按一次(按開關燈的編號: 3,6,9,......,99)。

......

問題是,在第100個同學按過之後,有多少盞燈是亮著的?這些燈的編號是多少?要求給出解題思路或給出偽碼。

c#**

static

void

turnlights()

}for (int i = 1; i <= lights.length-1; i++)

}}

lua**

function

turnlights()

--boolean型別的燈陣列

lights={}

--i為學生號碼,依次從第乙個同學到最後乙個同學依次按燈

for i=1,100,1

dofor j=i,100,i do

lights[j]=not

lights[j]

endend

for i=1,table.getn(lights),1

doif lights[i]==true

then

print

(i)

endend

endturnlights()

最終得出的結果是以下編號的燈亮著14

9162536

4964

81100

4 燈泡開關問題

問題描述 有編號1 100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。現在開始按開關。第1個同學,把所有的燈泡開關都按一次 按開關燈的編號 1,2,3,100 第2個同學,隔乙個燈按一次 按開關燈的編號 2,4...

每日刷題 燈泡開關

示例 輸入 3 輸出 1 解釋 初始時,燈泡狀態 關閉,關閉,關閉 第一輪後,燈泡狀態 開啟,開啟,開啟 第二輪後,燈泡狀態 開啟,關閉,開啟 第三輪後,燈泡狀態 開啟,關閉,關閉 你應該返回 1,因為只有乙個燈泡還亮著。解答 首先給一種列舉的解法 開闢大小為n的陣列,分別針對第i 0,1,2,3 ...

319 燈泡開關

初始時有 n 個燈泡關閉。第 1 輪,你開啟所有的燈泡。第 2 輪,每兩個燈泡你關閉一次。第 3 輪,每三個燈泡切換一次開關 如果關閉則開啟,如果開啟則關閉 第 i 輪,每 i 個燈泡切換一次開關。對於第 n 輪,你只切換最後乙個燈泡的開關。找出 n 輪後有多少個亮著的燈泡。示例 輸入 3輸出 1解...