問題描述:有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得倍數的燈的開關狀態改變一次。問,此時所有開著的燈的...