/// 光线在墙壁间不停地反射,看起来是一个非常复杂的现象,同时题意
///要求我们确定光线最终会碰到哪个墙角。但是当光线射到墙上时,墙的长度p
///和初始光线射到的距离q之间必然满足,px = qy,x和y都是整数。那么我们
///需要找一个最小的x,使得上式成立,这时我们根据x的奇偶性可以知道光线的
///停止在上或下边,根据光线弹射次数的奇偶性可以知道它最终停在左边还是右边
///从而问题得解。
/// 也可以自己画出延伸的虚拟的墙体,使得光线继续向上下两端传播,从而得到对于
///下面代码更好的理解。
class Solution {
public:
int mirrorReflection(int p, int q) {
for(int i = 0, s = p;i < q;++i ){
if(s%q == 0){
if(i%2 == 0){
return 2-(s/q)%2;
}else{
return 0;
}
}
s += p;
}
return -1;
}
};
浙公网安备 33010602011771号