समस्या विवरण
मान लीजिए हम गेस गेम खेल रहे हैं। इस गेम के गुण इस प्रकार हैं:
- खिलाड़ी 1, 1 से n तक एक संख्या चुनेगा। खिलाड़ी 2 को अनुमान लगाना होगा कि मैंने कौन सी संख्या चुनी है।
- हर बार जब खिलाड़ी 2 गलत अनुमान लगाता है, तो खिलाड़ी 1 बताएगा कि संख्या अधिक है या कम।
हम guess(num) फ़ंक्शन का उपयोग कर सकते हैं जो 3 संभावित परिणाम लौटाता है:
- -1 - खिलाड़ी 1 की संख्या कम है
- 1 - खिलाड़ी 1 की संख्या अधिक है
- 0 - संख्या मेल खाती है
उदाहरण
यदि इनपुट है: n = 10, pick = 5, तो आउटपुट होगा 5।
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें (बाइनरी सर्च):
- l := 1, r := n
- जब l <= r:
- m := l + (r - l) / 2
- यदि guess(m) == 0, तो m लौटाएं
- यदि guess(m) == -1, तो r := m - 1
- अन्यथा l := m + 1
- 0 लौटाएं
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
class Solution {
private:
int number;
int guess(int num) {
if(number > num)
return 1;
if(number < num)
return -1;
return 0;
}
public:
Solution(int n) {
number = n;
}
int guessNumber(int n) {
int l=1, r=n, m;
while(l <= r) {
m = l + (r-l)/2;
if(guess(m) == 0)
return m;
if(guess(m) == -1)
r = m-1;
else
l = m+1;
}
return 0;
}
};
int main() {
Solution ob(5); // pick = 5
cout << (ob.guessNumber(10));
return 0;
}
इनपुट
5,10
आउटपुट
5