在C ++中猜测数字更高或更低

假设我们正在玩猜猜游戏。该游戏的属性如下-

玩家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