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

การหาจำนวนก๊อกน้ำที่เปิดอยู่หลังจาก n รอบใน JavaScript

ปัญหา

สมมติว่าโรงเรียนจัดเกมในวันประจำปี ดังนี้:

มี "n" ก๊อกน้ำ และเลือก "n" นักเรียนมาสุ่ม ครูขอนักเรียนคนแรกไปเปิดก๊อกน้ำทุกตัว ต่อมา นักเรียนคนที่สองไปปิดก๊อกน้ำทุก 2 ตัว คนที่สามไปสลับสถานะ (เปิด→ปิด, ปิด→เปิด) ของก๊อกน้ำทุก 3 ตัว คนที่สี่ทำทุก 4 ตัว และทำต่อไปจนถึงนักเรียนคนที่ n หลังจบกระบวนการ ก๊อกน้ำที่เปิดอยู่มีกี่ตัว?

เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลข n และคืนค่าจำนวนก๊อกน้ำที่เปิดอยู่

ตัวอย่าง

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

const num = 15;
const openTaps = (num = 1) => {
  const arr = [];
  let index = 1;
  while (index ** 2 <= num) {
    arr.push(index++ ** 2);
  }
  return arr.length;
};
console.log(openTaps(num));

ผลลัพธ์

7

คำอธิบายเพิ่มเติม

นี่คือปัญหา "100 doors problem" หรือ "Locker problem" ก๊อกน้ำที่เปิดอยู่คือตัวที่มีตัวหารจำนวนคี่ (คือจำนวนกำลังสองสมบูรณ์) เพราะแต่ละก๊อกถูกสลับสถานะตามจำนวนตัวหาร จำนวนกำลังสองมีตัวหารคี่ ดังนั้นคำตอบคือจำนวนกำลังสองที่ ≤ n คือ ⌊√n⌋