在 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