假设我们正在玩猜猜游戏。该游戏的属性如下-
玩家1将选择一个从1到n的数字。player2必须猜测我选了哪个号码。每当玩家2猜错时,玩家1都会告诉玩家2这个数字是高还是低。
我们可以使用功能guess(num),它将返回3种可能的结果,如下所示:
-1 − Player1的号码较小
1-Player1的号码更高
0-号码匹配
因此,如果输入为n = 10,pick = 5,则输出将为5。
为了解决这个问题,我们将遵循以下步骤-
l:= 1,r:= n
当l-= r时,做-
l:= m +1
r:= m-1
返回m
m:= l +(r-l)/ 2
如果guess(m)与0相同,则-
如果guess(m)与-1相同,则-
除此以外
返回0
让我们看下面的实现以更好地理解-
#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;
}
};
main(){
Solution ob(5); //pick = 5
cout << (ob.guessNumber(10));
}5,10
输出结果
5