ปัญหา
พิจารณาสถานการณ์ต่อไปนี้ -
มี n หลอดไฟที่ปิดในตอนแรก ก่อนอื่นเราเปิดหลอดไฟทั้งหมด จากนั้นเราก็ปิดหลอดไฟทุกวินาที ในรอบที่ 3 เราจะเปิดสวิตช์ทุกๆ หลอดที่สาม (เปิดขึ้นหากปิดอยู่หรือปิดอยู่หากเปิดอยู่)
โดยทั่วไป สำหรับรอบ ith เราสลับทุกหลอด 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