學生關燈問題

2021-06-22 17:16:50 字數 823 閱讀 8413

今天看到別人分享的一道華為機試題目,感覺還比較有趣,問題是這樣子的

描述:一條長廊裡依次裝有n(1 ≤ n ≤ 65535)盞電燈,從頭到尾編號1、2、3、…n-1、n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。 

/有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下;接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下;接著第三個學生把號碼凡是3的倍數的電燈的開關拉一下;

如此繼續下去,最後第n個學生把號碼凡是n的倍數的電燈的開關拉一下。n個學生按此規定走完後,長廊裡電燈有幾盞亮著。注:電燈數和學生數一致。 

乍一看,這個問題不知道如何入手,其實分析一下,他就是個因式分解的問題的變形。如假設有4盞燈,編號為1 2 3 4,那麼會有四個同學依次通過。1號同學過去時會點亮所有的等,2號同學過去會關掉2 4 等,3號同學過去會關掉3號等,4號同學會重新點亮4號等。如果用-1表示燈泡為滅,1表示燈泡亮,則每個同學過次走廊就相當於反轉一次開關,最後仍為1的就表示亮著的燈。

於是問題具化為每個同學過去要動哪些開關。題目中交代的很清楚了就是他的倍數。所以**就很簡單了。如下所示

# include# includeusing namespace std;

int main()

; int n;

int stilllight=0; //統計最終亮著的燈

cout<<"please input the number of student,should be between 0 and 65535"<>n;

if(n<1||n>65535)

{ cout<<"wrong number"<

開關燈問題

描述 一條長廊裡依次裝有n 1 n 65535 盞電燈,從頭到尾編號1 2 3 n 1 n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下 接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下 接著第三個學生把號碼凡是3的倍數的電燈...

開燈關燈問題

題目 大廳裡有100盞燈,每盞燈都編了號碼,分別為1 100。每盞燈由乙個開關來控制。開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。開始時,燈是全滅的。現在按照以下規則按動開關。第一次,將所有的燈點亮。第二次,將所有2的倍數的開關按一下。第三次,將所有3的倍數的開關按一下。以此類推。第...

開關燈問題

題目描述 有若干隻燈排成一排。所有的燈開始的時候都是關閉的,現對這些燈進行一系列的操作。在第 i次操作的時候,調整所有編號是 i的倍數的燈的狀態 原本開啟的燈將它關閉,原本關閉的將它開啟 輸入 每組測試資料佔一行,包含乙個整數 n 0 n 10 5 輸出 經過無限次操作之後,第 n隻燈的狀態 0表示...