C++ 中的镜像反射


假设有一个特殊的正方形房间,四面墙壁都是镜子。在除了西南角以外的每个角落都放置了一个接收器。这些接收器编号为 0、1 和 2。现在这个正方形房间的墙壁长度为 p,从西南角发出的激光束第一次遇到东墙,与第 0 个接收器的距离为 q。我们需要找到激光束第一次遇到的接收器的编号。

因此,如果 p = 2,q = 1,则情况如下:

因此,输出将为 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

更新于: 2020年5月5日

660 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告