共计 451 个字符,预计需要花费 2 分钟才能阅读完成。
题目:镜面反射
题目:镜面反射
有一个非凡的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 0,1,以及 2。
正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的间隔为 q。
返回光线最先遇到的接收器的编号(保障光线最终会遇到一个接收器)
示例
输出:p = 2, q = 1
输入:2
解释:这条光线在第一次被反射回右边的墙时就遇到了接收器 2
题解
咱们假如光不会反射,间接直行,如下图所示,由此咱们能够失去以下论断
- 如果
q % 2 == 0
, 反射点为0
- 如果
p % 2 == 0
, 反射点为2
- 如果
q % 2 == 1
, 反射点为1
或2
- 如果
p % 2 == 1
, 反射点为0
或1
当 p
和 q
不同时为偶数时,咱们能够简化论断
- 如果
q % 2 == 0
, 反射点为0
- 如果
p % 2 == 0
, 反射点为2
- 剩下状况,反射点为
1
func mirrorReflection(p int, q int) int {
for q % 2 == 0 && p % 2 == 0 {
p /= 2
q /= 2
}
if p % 2 == 0 {return 2}
if q % 2 == 0 {return 0}
return 1
}
正文完