Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Bật tắt đèn trong JavaScript

Mô tả vấn đề

Xét tình huống: Có n bóng đèn ban đầu tắt. Ta bật tất cả. Sau đó tắt mỗi đèn thứ 2. Lượt 3, chuyển trạng thái mỗi đèn thứ 3 (bật nếu tắt, tắt nếu bật).

Nói chung, lượt i, chuyển trạng thái mỗi đèn thứ i. Cuối cùng lượt n, chỉ chuyển đèn cuối. Viết hàm nhận n, trả về số đèn còn bật sau n lượt.

Ví dụ, nếu đầu vào là:

const n = 4;

Thì đầu ra nên là:

const output = 2;

Giải thích đầu ra

Trong mảng trạng thái, 0 = tắt, 1 = bật:

LượtTrạng thái
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]

Sau lượt 5 chỉ còn 2 đèn bật.

Ví dụ minh họa

Mã thực hiện (nghiệm quan trọng: chỉ đèn số chính phương mới bật):

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));

Đầu ra

Kết quả trong console sẽ là:

2