Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chuyển đổi trạng thái đèn (Bulb Switcher II) trong C++

Có n đèn initially bật và 4 nút bấm. Sau đúng m thao tác ngẫu nhiên, hãy đếm số trạng thái khác nhau có thể có của n đèn. 4 nút thực hiện:

  • Đảo tất cả đèn.
  • Đảo đèn số chẵn.
  • Đảo đèn số lẻ.
  • Đảo đèn ở vị trí 3k+1 (k = 0,1,2...).

Ví dụ: n=3, m=1 → 4 trạng thái.

Quan sát & Giải pháp

Do tính chất tuần hoàn của các phép đảo, số trạng thái chỉ phụ thuộc vào n và m với các trường hợp:

  • n==0 || m==0 → 1
  • n==1 → 2
  • n==2 → m==1 ? 3 : 4
  • m==1 → 4
  • m==2 → 7
  • Còn lại → 8

Mã nguồn C++

#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;
    }
};

int main() {
    Solution ob;
    cout << ob.flipLights(3, 1);
    return 0;
}

Đầu vào / Đầu ra

Input: 3 1

Output: 4