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
广告