#include <iostream>
using namespace std;
//法一
int bfind(int a[],int len,int val)
{
int end = len/2; //中间位置
int start = 0; //开始位置
int rLen = len; //剩余检测数组的长度
while(start != end && rLen != end)
{
if(val < a[end])
{
rLen = end;
end = (end+start)/2;
}
else if(val > a[end])
{
start = end;
end = (end+rLen)/2;
}
else
return end;
}
return -1;
}
// 法二(这个很好理解)
int binarySearh(int a[],int len,int x)
{
int first = 0;
int last = len-1;
int mid;
while(first <= last)
{
mid = first + (last-first)/2; //直接使用(high+first)/2会有整数溢出的情况发生
if(x == a[mid])
return mid;
else if(x < a[mid])
last = mid-1;
else
first = mid+1;
}
return -1;
}
int main()
{
int a[] = {1,3,4,5,7,8,9,11,17,38,56};
int b;
cin>>b;
//int count = bfind(a,11,b);
int count = binarySearh(a,11,b);
if(count == -1)
cout<<"no reslution!"<<endl;
else
cout<<count<<endl;
return 0;
}