C++练习 | 在递增序列中查找最后一个小于等于指定数的元素

#include <iostream>
using namespace std;
int mid,l0;
int solve(int a1[],int l,int r,int x)
{
    if(l==r&&l==1&&a1[l]>x)
        return -1;
    if(l==r&&a1[l]<=x)
        return a1[l];
    if(l==r&&a1[l]>x)
        return solve(a1,l0,mid,x);
    mid=(l+r)/2;
    l0=l;
    if(a1[mid]>x)
        return solve(a1,l,mid-1,x);
    else if(a1[mid]==x)
        return a1[mid];
    else
        return solve(a1,mid+1,r,x);
}

int main()
{
    int a[107];
    int n,m,x;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    while(m--)
    {
        cin>>x;
        cout<<solve(a,1,n,x)<<endl;
    }
    return 0;
}

要注意考虑只剩一个元素时的求解

posted @ 2019-04-16 10:22  洛枫大人  阅读(1223)  评论(0编辑  收藏  举报