在 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

更新於:2021年3月20日

523 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.