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