맞추기 게임을 한다고 가정해 보겠습니다. 이 게임의 속성은 다음과 같습니다 -
플레이어 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