一、二分查找法的算法图解
注:
二分法只能适用于已经排好的数组
二、题目
请编写“猜数游戏”算法。详见任务详情
猜数游戏:我随便想一个范围在1~100内的数字。你的目标是以最少次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。
三、题目分析
要查找到一个确定数字,我们首先想到的算法是二分查找法
该算法每一次排除一半的不符合题意的数字,循环进行,直至找到要猜的数字为止
四、程序(c++)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int a[maxn];
int main(){
int n,x;
cin>>n;//输入要猜数字所在的范围
for(int i=0;i<n;i++) a[i]=i+1;
cin>>x;//输入要猜的数字
int mid,left=0,right=n-1;
int i=0;
while(left<=right){
mid=(left+right)/2;
if(a[mid]==x){
i++;
break;
}
else if(a[mid]>x){
i++;
right=mid-1;
}
else{
i++;
left=mid+1;
}
}
cout<<"至少要猜的次数为:"<<i<<endl;
return 0;
}