ปัญหา
พิจารณาสถานการณ์ต่อไปนี้ -
มี 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