一个标准的二分法查找
int guess(int num);//返回数字大小
int guessNumber(int n)
{
int left=1;
int right=n;
int pick;
pick=left+(right-left)/2;
int flag=guess(pick);
while(flag!=0)
{
if(flag==1)
{
left=pick+1;
}
else
{
right=pick-1;
}
pick=left+(right-left)/2;
flag=guess(pick);
}
return pick;
}
};
每次未找到目标数字时,都要修改新的查找区间,然后查找这个区间的中值,值得注意的是,(left+right)/2 这种写法在一开始是很容易溢出的,例如当left和right都是int,两个值的初始值都超过int限定大小的一半,那么left+right就会发生溢出,所以应该用left+(right-left)/2来防止求中值时候的溢出。