有100盞燈,從1~100編上號,開始時所有的燈都是關著的,第一次,把所有編號是1的倍數的燈的開關狀態改變一次;第二次,把所有編號是2的倍數的燈的開關狀態改變一次;第三次,把所有編號是3的倍數的燈的開關狀態改變一次;以此類推,直到把所有編號是100得倍數的燈的開關狀態改變一次。問,此時所有開著的燈的編號
思路分析:
1.當開關狀態被改變奇數次時燈是亮著的,而開關狀態被改變偶數次時是熄滅的
2.任何乙個自然數都能表示為兩個整數的乘積(質數的乘積是1和他本身)
因此假如一盞燈的編號n是乙個整數x的倍數而改變狀態時,遇到下乙個整數n/x時會改變回來,此時開關狀態被改變了偶數次,相當於不變
只有一種情況,開關的狀態會被改變奇數次,那就是x==n/x,也就是n等於x的平方,因為只會遍歷一次x,因此開關狀態也只會改變一次
這些x就是平方數,如:1,4,9,16,25 ……
**的話可以選擇模擬開關變化,也可以直接輸出這些平方數
#includeusing namespace std;
int main()
return 0;
}
面試題 100盞燈問題
問題描述 有100盞燈,編號依次為1,2,3.100,電燈全部關著。現在來了100個人,第乙個人把所有的燈開關按下 第二個人隔乙個燈按下 2,4,6 第三個人每隔兩個燈按下 3,6,9 第100個人隔99個燈按下 100 最後還有幾盞燈,那幾盞燈亮著?問題分析 由於所有燈都全部關著,我們可以知道當燈...
100盞燈開關問題
問題描述 有100盞燈泡,第一輪點亮所有電燈,第二輪每兩盞燈熄滅一盞,即熄滅第2盞,第4盞,以此類推,第三輪改變編號為3的倍數的電燈,第3盞,第6盞,如果原來那盞燈是亮的,就熄滅它,如果原來是滅的,就點亮它,以此類推,直到第100輪。問第100結束後,還有多少盞燈泡是亮的?解答 分析可知如果最後某一...
100盞燈的問題
有100盞燈,從1 100編上號,開始時所有的燈都是關著的,第一次,把所有編號是1的倍數的燈的開關狀態改變一次 第二次,把所有編號是2的倍數的燈的開關狀態改變一次 第三次,把所有編號是3的倍數的燈的開關狀態改變一次 以此類推,直到把所有編號是100得倍數的燈的開關狀態改變一次。問,此時所有開著的燈的...