题目:

有一段长度为n的序列,q次查找,每次查找输入一个值x,需要你判断序列中是否存在值等于x的元素,若存在,请输出位置最小的x所在的位置,若不存在,请输出-1.

分析:

这些题目都不是很难,中间的道理很简单,就是临界条件这类的不好拿捏。

源码:

include

using namespace std;
int main(void)
{

int n;
cin>>n;
int arr[n+1];
for(int i=1;i<=n;i++)
{
    cin>>arr[i];
}
int q;
cin>>q;
for(int j=0;j<q;j++)
{
    int x,a=1,b=n;
    cin>>x;
    while(x>=arr[1]&&x<=arr[n]&&b-a>=0)
    {
        int md=arr[(a+b)/2];
        if(x==md)
        {
            if(x==arr[(a+b)/2-1])
            {
                b=(a+b)/2-1;
            }else
            {
                cout<<(a+b)/2<<endl;
                a=-1;
                break; 
            }
        }else if(x>md)
        {
            a=(a+b)/2+1;
        }else if(x<md)
        {
            b=(a+b)/2-1;
        }
    }
    if(a==1)
    {
        cout<<-1<<endl;
    }
}
return 0;

}