[TOC]
## 猜数字
### 题目描述
输入一个数字n(1 <= n <= 32768), 利用二分法猜到这个数字.
* * * * *
### 输入
一个数字
* * * * *
### 输出
一共若干行, 一行两个数, 第一个数为猜的次数, 第二个数为猜的数字.
* * * * *
### 代码实现
```
#include<iostream>
using namespace std;
int n;
int cur = 1;
void search(int start,int end){
int mid = (end+start)/2;
cout << (cur++) << " " << mid << endl;
if(mid == n){
return ;
}else if(n > mid){
start = mid+1;
search(start,end);
}else{
end = mid -1;
search(start, end);
}
}
int main(){
cin >> n;
search(1,32768);
return 0;
}
```
### 分析
本题要求用二分算法来解决问题,二分算法也称为折半查找法。 当待查找数值X与mid相比较,有3种可能:
1、X等于mid,退出程序。
2、X大于mid,将start改为mid+1,继续递归,直至mid等于X。
3、X小于mid,将end改为mid-1,继续递归,直至mid等于X。