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

C++의 미러 리플렉션

<시간/>

네 벽 각각에 거울이 있는 특별한 정사각형 방이 있다고 가정합니다. 남서쪽 모서리를 제외한 각 모서리에는 수용체가 있습니다. 이들은 0, 1, 2로 번호가 매겨집니다. 이제 정사각형 방에는 길이가 p인 벽이 있고 남서쪽 모서리의 레이저 광선이 먼저 0번째 수용체에서 거리 q에서 동쪽 벽과 만납니다. 광선이 가장 먼저 만나는 수용체의 수를 찾아야 합니다.

따라서 p =2이고 q =1이면 케이스는 다음과 같습니다. -

C++의 미러 리플렉션

따라서 광선이 처음으로 왼쪽 벽으로 반사될 때 수용체 2를 만나므로 출력은 2가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • p와 q가 모두 짝수인 반면,
    • p :=p/2
    • q :=q / 2
  • p가 짝수이면 2를 반환합니다.
  • q가 짝수이면 0을 반환
  • 1을 반환합니다.

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int mirrorReflection(int p, int q) {
      while(p % 2 == 0 && q % 2 == 0){
         p >>= 1;
         q >>= 1;
      }
      if(p % 2 == 0) return 2;
      if(q % 2 == 0) return 0;
      return 1;
   }
};
main(){
   Solution ob;
   cout << (ob.mirrorReflection(2, 1));
}

입력

2
1

출력

2