一道oj题目,没能通过,但是数据正确,求指出代码错误的地方
#include<iostream>#include<string.h>usingnamespacestd;inta[10003];intmain(){intn,m,k,...
#include <iostream>
#include <string.h>
using namespace std;
int a[10003];
int main()
{
int n,m,k,j;
while (cin>>n>>m)
{
for (int i=0;i<n;i++)
cin>>a[i];
for (int i=0;i<m;i++)
{
j=0;
cin>>k;
for (int d=0;d<n;d++)
if (k<=a[d])
{
cout<<a[d]<<endl;
j=1;
break;
}
if (j==0) cout<<"-1"<<endl;
}
}
return 0;
}
题目地址:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1925 展开
#include <string.h>
using namespace std;
int a[10003];
int main()
{
int n,m,k,j;
while (cin>>n>>m)
{
for (int i=0;i<n;i++)
cin>>a[i];
for (int i=0;i<m;i++)
{
j=0;
cin>>k;
for (int d=0;d<n;d++)
if (k<=a[d])
{
cout<<a[d]<<endl;
j=1;
break;
}
if (j==0) cout<<"-1"<<endl;
}
}
return 0;
}
题目地址:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1925 展开
展开全部
你误解题目的意思了,题目是要找出【这组数】中第一个不小于k的数,并没有要求要按输入的顺序来查找。
要解决这题可以先对数组进行排序,然后每次查询的时候进行二分查找:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int m, n, k, a[10003];
while(cin >> n >> m){
for(int i=0; i<n; i++)
cin >> a[i];
sort(a, a+n);
while(m--){
cin >> k;
int L = 0, H = n-1, mid;
while(L < H){
mid = (L+H)/2;
if(a[mid] < k)
L = mid+1;
else
H = mid;
}
cout << ((a[L]>=k)? a[L]: -1) << endl;
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询