สมมติว่ามีหลอดไฟ n ดวงที่ปิดในตอนแรก ก่อนอื่นเราเปิดหลอดไฟทั้งหมด จากนั้นเราจะปิดหลอดไฟทุก ๆ วินาที ในรอบที่สาม เราสลับทุกหลอดที่สาม (เปิดหากปิดหรือปิดหากเปิดอยู่) ในทำนองเดียวกัน สำหรับรอบที่ i เราสลับทุกหลอด i สำหรับรอบที่ n เราจะสลับเฉพาะหลอดสุดท้ายเท่านั้น ดังนั้นเราต้องหาจำนวนหลอดไฟที่เปิดอยู่หลังจาก n รอบ ดังนั้นหากอินพุตเป็น 3 ผลลัพธ์จะเป็น 1 เนื่องจาก −
- ตอนแรก หลอดไฟสามดวง [ปิด, ปิด, ปิด].
- หลังจากรอบแรก หลอดไฟทั้งสามจะ [on, on, on].
- หลังจากรอบที่ 2 หลอดไฟทั้งสามจะ [เปิด ปิด เปิด]
- หลังจากรอบที่ 3 หลอดไฟทั้งสามจะ [เปิด ปิด ปิด]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ขั้นตอนนี้ตรงไปตรงมา เราต้องหาสแควร์รูทของ n แล้วย้อนกลับ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; class Solution { public: int bulbSwitch(int n) { return sqrt(n); } }; main(){ Solution ob; cout << (ob.bulbSwitch(3)); }
อินพุต
3
ผลลัพธ์
1