मान लीजिए एक विशेष वर्ग कमरा है जिसकी चारों दीवारों पर दर्पण लगे हैं। दक्षिण-पश्चिम कोने को छोड़कर प्रत्येक कोने में रिसेप्टर्स हैं। इन्हें 0, 1, और 2 के रूप में संख्यांकित किया गया है। अब वर्ग कमरे की दीवारों की लंबाई p है, और दक्षिण-पश्चिम कोने से एक लेजर किरण पूर्वी दीवार पर 0th रिसेप्टर से दूरी 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