ปัญหา
สมมติว่าโรงเรียนจัดเกมในวันประจำปี ดังนี้:
มี "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⌋