在 JavaScript 中開關燈泡
問題
考慮以下情況:
最初有 n 個燈泡處於關閉狀態。我們首先開啟所有燈泡。然後,我們關閉每第二個燈泡。在第三輪中,我們切換每個第三個燈泡(如果關閉則開啟,如果開啟則關閉)。
一般來說,對於第 i 輪,我們切換每個第 i 個燈泡。最後,對於第 n 輪,我們只切換最後一個燈泡。
我們需要編寫一個 JavaScript 函式,它只接受 n 作為輸入,並找出 n 輪之後有多少個燈泡是開啟的。
例如,如果函式的輸入是:
const n = 4;
那麼輸出應該是:
const output = 2;
輸出解釋
在狀態陣列中,0 表示關閉,1 表示開啟:
| 輪次 | 狀態 |
|---|---|
| 1 | [1, 1, 1, 1, 1] |
| 2 | [1, 0, 1, 0, 1] |
| 3 | [1, 0, 0, 0, 1] |
| 4 | [1, 0, 0, 1, 1] |
| 5 | [1, 0, 0, 1, 0] |
因此,第五輪之後只有兩個燈泡是開啟的。
示例
程式碼如下:
const n = 5;
const findOn = (n = 1) => {
let off = 0;
let on = n;
while(off <= on){
let mid = Math.floor((off + on) / 2);
if(mid * mid > n){
on = mid - 1;
}else{
off = mid + 1;
};
};
return Math.floor(on);
};
console.log(findOn(n));輸出
控制檯輸出:
2
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP