合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[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。