開關燈問題

2021-06-22 16:23:44 字數 1190 閱讀 9843

描述:一條長廊裡依次裝有n(1 ≤ n ≤ 65535)盞電燈,從頭到尾編號1、2、3、…n-1、n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。

有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下;接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下;

接著第三個學生把號碼凡是3的倍數的電燈的開關拉一下;如此繼續下去,最後第n個學生把號碼凡是n的倍數的電燈的開關拉一下。

n個學生按此規定走完後,長廊裡電燈有幾盞亮著。注:電燈數和學生數一致。

輸入:電燈的數量

輸出:亮著的電燈數量

樣例輸入:3

樣例輸出:1

思路1:

首先是輸入2個資料,然後定義乙個陣列,介於燈只有2種狀態,所以就定義成bool型別,然後初始化為0,代表燈起初全部是關閉狀態。

接著是2個迴圈,外面的迴圈代表從編號為1的人開始,直到結束。

裡面的迴圈代表從編號為1的燈進行操作,把符合要求的燈的狀態改變為和原來相反的狀態即可。

最後判斷哪些燈是開的,將它的編號輸出。

#includeint getlightnum(unsigned int num)

; int lightnum=0;

for(unsigned int i=1;i<=num;i++)

for(unsigned int j=1;j

由題意最如果最後某一盞燈是亮著的,那麼它一定是被切換了奇數次(第0次的時候全部都關著)。

首先來看一下6這盞燈,它被切換的次數是第1次(輪),第2次,第3次和第6次。

可以看出如果某一輪6被切換了,那麼該輪數一定可以整數6,即是6的約數,由於約數是成對出現的,所以6被關掉的次數是偶數次。

但是是對於像4,16這樣的完全平方數,由於他們都有乙個約數k 使得 k的平方等於該完全平方數,所以其被關掉的次數應該為奇數,因為k只能被算一次。

所以該問題的答案是只有1-n的完全平方數,才是亮著的。

即1,4,3,16,25,36,49,64,81,100...這些燈亮著。

*備註:

完全平方數:乙個數如果是另乙個整數的完全平方,那麼我們就稱這個數為完全平方數,也叫做平方數。

**如下:

#include#includeint getperfectsquare(int i)

return x;

}int main()

開關燈問題

題目描述 有若干隻燈排成一排。所有的燈開始的時候都是關閉的,現對這些燈進行一系列的操作。在第 i次操作的時候,調整所有編號是 i的倍數的燈的狀態 原本開啟的燈將它關閉,原本關閉的將它開啟 輸入 每組測試資料佔一行,包含乙個整數 n 0 n 10 5 輸出 經過無限次操作之後,第 n隻燈的狀態 0表示...

OJ開關燈問題

將n個燈泡編成n號,即1,2,3,n。現有n個人去拉開關,第乙個人把1的倍數的燈號開關都拉一下,第二個人把2的倍數的燈號都拉一下,第三個人把3的倍數的燈號都拉一下,直到第n個人將第n號燈泡拉一下。假定開始時,燈泡全不亮,請問 這n個人全拉完後,有多少個燈泡是亮的?輸入乙個整數n 1 n 100000...

開關燈問題 BulbSwitch

2018 06 17 11 54 51 開關電燈問題是乙個比較經典的趣味數學題,本文中主要介紹其中的一些常見情況。一 bulb switch 問題描述 問題求解 初始狀態 off,off,off,off.step 1 on,on,on,on step 2 on,off,on,對於第 i 盞燈,其在s...