Vấn đề
Hãy xem xét tình huống sau -
Có n bóng đèn lúc đầu tắt. Đầu tiên chúng tôi bật tất cả các bóng đèn. Sau đó, chúng tôi tắt bóng đèn mỗi giây. Ở vòng thứ ba, chúng tôi bật tắt mọi bóng đèn thứ ba (bật nếu nó đang tắt hoặc tắt nếu nó đang bật).
Nói chung, đối với vòng thứ i, chúng tôi bật tắt mọi bóng đèn thứ i. Và cuối cùng cho vòng thứ n, chúng tôi chỉ bật tắt bóng đèn cuối cùng.
Chúng tôi được yêu cầu viết một hàm JavaScript lấy n làm đầu vào duy nhất và tìm ra cách nhiều bóng đèn đang bật sau n vòng.
Ví dụ:nếu đầu vào của hàm là -
const n = 4;
Sau đó, kết quả đầu ra phải là -
const output = 2;
Giải thích đầu ra:
Trong mảng trạng thái, số 0 biểu thị tắt trong khi số 1 biểu thị bật -
Round | Bang |
---|---|
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] |
Do đó, sau vòng thứ năm, chỉ có hai bóng đèn được bật.
Ví dụ
Mã cho điều này sẽ là -
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
Và đầu ra trong bảng điều khiển sẽ là -
2