Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 전구 전환기 II

<시간/>

처음에 켜져 있는 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