面試題 100盞燈問題

2021-08-18 22:26:09 字數 725 閱讀 2800

問題描述:有100盞燈,編號依次為1,2,3.100,電燈全部關著。現在來了100個人,第乙個人把所有的燈開關按下;第二個人隔乙個燈按下(2,4,6…);第三個人每隔兩個燈按下(3,6,9…).第100個人隔99個燈按下(100),最後還有幾盞燈,那幾盞燈亮著?

問題分析:由於所有燈都全部關著,我們可以知道當燈被按下次數為奇數時燈亮,偶數時燈滅。每盞燈的開關被按下次數與其編號的正約數個數有關係。

例如:第乙個被拉1下;

第二個被拉2下;

第三個被拉2下;

第四個被拉3下;

…… 上述可知,非方數一定有偶個公約數,平方數一定有奇個公約數,而燈開關被按下的數為奇數時燈才亮,所有編號1~100中平方數有1(1^2),4(2^2),9(3^2),16(4^2),25(5^2),36(6^2),49(7^2),64(8^2),81(9^2),100(10^2)共10個數。所以亮著的燈有10個。

燈亮的編號為1~10的平方。(即求1~100的完全平方數)

**實現如下

#include

#include

#include

using

namespace

std;

int main()

結果輸出如下:

面試題 100盞燈問題

有100盞燈,從1 100編上號,開始時所有的燈都是關著的,第一次,把所有編號是1的倍數的燈的開關狀態改變一次 第二次,把所有編號是2的倍數的燈的開關狀態改變一次 第三次,把所有編號是3的倍數的燈的開關狀態改變一次 以此類推,直到把所有編號是100得倍數的燈的開關狀態改變一次。問,此時所有開著的燈的...

100盞燈開關問題

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

100盞燈的問題

有100盞燈,從1 100編上號,開始時所有的燈都是關著的,第一次,把所有編號是1的倍數的燈的開關狀態改變一次 第二次,把所有編號是2的倍數的燈的開關狀態改變一次 第三次,把所有編號是3的倍數的燈的開關狀態改變一次 以此類推,直到把所有編號是100得倍數的燈的開關狀態改變一次。問,此時所有開著的燈的...