2020-5-20
首先掏导,在這里先祝愿全天下的單身狗開心快樂每一天
正題:
有100盞燈泡享怀,第一輪點(diǎn)亮所有電燈,第二輪每兩盞燈熄滅一盞趟咆,即熄滅第2盞添瓷,第4盞梅屉,以此類推,第三輪改變編號(hào)為3的倍數(shù)的電燈鳞贷,第3盞坯汤,第6盞,如果原來那盞燈是亮的搀愧,就熄滅它惰聂,如果原來是滅的,就點(diǎn)亮它咱筛,以此類推搓幌,直到第100輪。問第100結(jié)束后迅箩,還有多少盞燈泡是亮的
我們先用最簡(jiǎn)單的代碼模擬下程序的實(shí)現(xiàn):
public class Test {
public static void main(String []args) {
byte[] lights = new byte[100];
// 模擬100個(gè)人開關(guān)燈場(chǎng)景 i 表示人 j 表示燈
for(int i = 1;i <= 100;i++){
for(int j = 0;j < 100;j++){
if((j + 1) % i == 0){
if(lights[j] == 0){
lights[j] = 1;
}else{
lights[j] = 0;
}
}
}
}
// 統(tǒng)計(jì)結(jié)果
for(int i = 0;i < 100;i++){
if(lights[i] == 1){
System.out.println(i + 1);
}
}
}
}
輸出結(jié)果:
1
4
9
16
25
36
49
64
81
100
由程序輸出可見溉愁,最后有10盞燈亮著,燈的編號(hào)如上饲趋。
不難發(fā)現(xiàn)拐揭,最后亮著的燈的編號(hào)為完全平方數(shù)。
我們將問題轉(zhuǎn)換為9盞燈的情況:
首先奕塑,九盞燈全滅:
第一個(gè)人點(diǎn)亮九盞燈:
第二個(gè)人:
... ...
中間過程省略
... ...
第九個(gè)人:
通過程序和畫圖模擬堂污,我們可以得到這樣的結(jié)論:
如果某一盞燈最后的結(jié)果是亮著的,那么它被切換了奇數(shù)次龄砰,因?yàn)槌跏紶顟B(tài)燈為滅敷鸦,也就可以認(rèn)為第0次燈為滅的狀態(tài)。所以對(duì)于每一盞燈寝贡,當(dāng)拉動(dòng)次數(shù)為奇數(shù),燈亮值依;燈拉動(dòng)次數(shù)為偶數(shù)圃泡,燈滅。
每盞燈拉動(dòng)的次數(shù)與它的編號(hào)所含約數(shù)的個(gè)數(shù)有關(guān)愿险,比如對(duì)于編號(hào)為4的燈泡來說颇蜡,4的約數(shù)為:
1,2,4
;所以編號(hào)為4這盞燈就被拉動(dòng)了三次。對(duì)于每盞燈它的編號(hào)有幾個(gè)約數(shù)辆亏,這盞燈就被拉動(dòng)幾次风秤。
通過上述結(jié)論,我們就可以思考下扮叨,對(duì)于1~100這些數(shù)字中缤弦,哪些數(shù)的約數(shù)是奇數(shù)個(gè)呢?因?yàn)榧s數(shù)都是成對(duì)出現(xiàn)的彻磁,所以約數(shù)為奇數(shù)個(gè)的數(shù)字就是完全平方數(shù)~
每天進(jìn)步一丟丟碍沐,大家加油~