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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP