맞추기 게임을 한다고 가정해 보겠습니다. 이 게임의 속성은 다음과 같습니다 -
플레이어 1은 1에서 n까지의 숫자를 선택합니다. player2는 내가 선택한 번호를 추측해야 합니다. 플레이어 2가 잘못 추측할 때마다 플레이어 1은 플레이어 2에게 숫자가 더 높거나 낮은지 알려줍니다.
다음과 같이 3가지 가능한 결과를 반환하는 함수 추측(num)을 사용할 수 있습니다. -
-
-1 − Player1의 번호가 더 낮습니다.
-
1 − Player1의 숫자가 더 높음
-
0 - 숫자가 일치합니다.
따라서 입력이 n =10, 선택 =5와 같으면 출력은 5가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
l :=1,r :=n
-
l −=r인 동안 −
-
m :=l+(r - l)/2
-
추측(m)이 0과 같으면 -
-
리턴 m
-
-
추측(m)이 -1과 같으면 -
-
r :=m - 1
-
-
그렇지 않으면
-
내가 :=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