假设我们正在玩猜猜游戏。该游戏的属性如下-
玩家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