有n(n>0)盞燈,編號為1~n,在桌子上排成一排。開始都是熄滅狀態。
第1趟,按下編號為1 的倍數的 燈的開關。(第一趟後所有的燈都亮了)
第2趟,按下編號為2 的倍數的 燈的開關。
第 i 趟,按下編號為i 的倍數的 燈的開關。
一直到第n趟,結束。
問:n趟過後,哪些燈亮著,哪些熄滅,有多少亮著?
根據問題,很直接的寫出**。
#include#include#include
using
namespace
std;
void
onoff(size_t n)
}for (size_t i = 1; i <=n; i++)
delete
door;
}int
main()
return0;
}
執行結果
n=11n=210
n=3100
n=4100
1n=510
010n=610
0100
n=7100
1000
n=8100
1000
0n=910
0100
001n=1010
0100
0010
n=1110
0100
0010
0n=1210
0100
0010
00n=1310
0100
0010
000n=1410
0100
0010
0000
n=1510
0100
0010
0000
0n=1610
0100
0010
0000
01n=1710
0100
0010
0000
010n=1810
0100
0010
0000
0100
n=1910
0100
0010
0000
0100
0n=2010
0100
0010
0000
0100
00n=2110
0100
0010
0000
0100
000n=2210
0100
0010
0000
0100
0000
n=2310
0100
0010
0000
0100
0000
0n=2410
0100
0010
0000
0100
0000
00n=2510
0100
0010
0000
0100
0000
001n=2610
0100
0010
0000
0100
0000
0010
n=2710
0100
0010
0000
0100
0000
0010
0n=2810
0100
0010
0000
0100
0000
0010
00n=2910
0100
0010
0000
0100
0000
0010
000n=3010
0100
0010
0000
0100
0000
0010
0000
n=3110
0100
0010
0000
0100
0000
0010
0000
0n=3210
0100
0010
0000
0100
0000
0010
0000
00n=3310
0100
0010
0000
0100
0000
0010
0000
000n=3410
0100
0010
0000
0100
0000
0010
0000
0000
n=3510
0100
0010
0000
0100
0000
0010
0000
0000
0n=3610
0100
0010
0000
0100
0000
0010
0000
0000
01
仔細分析後,發現,被按偶數次的燈,最後是熄滅的,而被按奇數次的燈,最後是亮的。而且從執行結果中可以看出規律:最後亮的燈,其編號都是完全平方數。第1盞,第4盞,第9盞...
舉幾個例子。
7 = 1 x 7 編號為7,在第1 趟和第 7 趟被按下。
30 = 1 x 30 編號為30,在1,30 ,2, 15 , 3 , 10 趟都會被按下。
= 2 x 15
= 3 x 10
1 = 1 x 1 編號為1, 在第 1趟被按下
4 = 1 x 4 編號為4 , 在第1 4 2 趟被按下
= 2 x 2
可以發現,編號是完全平方數,就會被按奇數次。否則會按下偶數次。因此,這個題目轉而變為判斷哪些數是完全平方數了。
即:編號為完全平方數的燈,最後是亮的,否則就是熄滅的。
判斷乙個數是否是完全平方數(不考慮負數)
bool isperfectsquare(unsigned intn)
開燈關燈問題
題目 大廳裡有100盞燈,每盞燈都編了號碼,分別為1 100。每盞燈由乙個開關來控制。開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。開始時,燈是全滅的。現在按照以下規則按動開關。第一次,將所有的燈點亮。第二次,將所有2的倍數的開關按一下。第三次,將所有3的倍數的開關按一下。以此類推。第...
開燈關燈問題
有編號1 100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。現在開始按開關。第1個同學,把所有的燈泡開關都按一次 按開關燈的編號 1,2,3,100 第2個同學,隔乙個燈按一次 按開關燈的編號 2,4,6,10...
開燈關燈問題
有編號1 100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。現在開始按開關。第1個同學,把所有的燈泡開關都按一次 按開關燈的編號 1,2,3,100 第2個同學,隔乙個燈按一次 按開關燈的編號 2,4,6,10...