สมมติว่ามีห้องสี่เหลี่ยมพิเศษที่มีกระจกอยู่บนผนังทั้งสี่ด้าน ในแต่ละมุมยกเว้นมุมตะวันตกเฉียงใต้มีตัวรับ สิ่งเหล่านี้มีหมายเลขเป็น 0, 1 และ 2 ตอนนี้ห้องสี่เหลี่ยมมีผนังยาว p และรังสีเลเซอร์จากมุมตะวันตกเฉียงใต้มาบรรจบกับผนังด้านตะวันออกครั้งแรกที่ระยะ q จากตัวรับที่ 0 เราต้องหาจำนวนตัวรับที่รังสีมาบรรจบกันก่อน
ดังนั้นหาก 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