这题很简单,只是记录一下犯的白痴错误。
如果找到的话返回第一个位置!
我竟然一开始用了二分查找!真的是WA到死!
#include <cstdio>
#include <algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int bs(int a[],int k,int n)
{
for(int i=1;i<=n;i++)
if(a[i]==k)
return i;
return -1;
}
int main()
{
int n,q;
int cnt=0;
int a[10005],k;
while(cin>>n>>q)
{
memset(a,0,sizeof(a));
if(n==0&&q==0) break;
cnt++;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
cout<<"CASE# "<<cnt<<":"<<endl;
while(q--)
{
cin>>k;
int rs=0;
rs=bs(a,k,n);
if(rs==-1)
cout<<k<<" not found"<<endl;
else
cout<<k<<" found at "<<rs<<endl;
}
}
return 0;
}
以及记录一下 lower_bound()函数的神奇用法!
#include <cstdio>
#include <algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,q;
int cnt=0;
int a[10005],k;
while(cin>>n>>q)
{
memset(a,0,sizeof(a));
if(n==0&&q==0) break;
cnt++;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
cout<<"CASE# "<<cnt<<":"<<endl;
while(q--)
{
cin>>k;
int rs=0;
rs=lower_bound(a+1,a+n+1,k)-a;
if(a[rs]==k)
cout<<k<<" found at "<<rs<<endl;
else
cout<<k<<" not found"<<endl;
}
}
return 0;
}