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