Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

สลับเปิด-ปิดหลอดไฟใน JavaScript


ปัญหา

พิจารณาสถานการณ์ต่อไปนี้:

มีหลอดไฟ n ดวงที่ปิดอยู่ทั้งหมด เราเปิดหลอดไฟทั้งหมดก่อน จากนั้นปิดหลอดไฟทุก 2 ดวง รอบที่ 3 เราสลับสถานะหลอดไฟทุก 3 ดวง (เปิดถ้าปิด ปิดถ้าเปิด)

โดยทั่วไป สำหรับรอบที่ 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]

ดังนั้นหลังจากรอบที่ 5 จะมีหลอดไฟเปิดอยู่ 2 ดวง

ตัวอย่างโค้ด

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