我想构建我的代码来解决所有最接近的较小值问题,这是我的努力

#include<iostream>
#include<stack>
using namespace std;
void all_smallest(int a[],int n)
{
    stack<int>s;
    for(int x=0;x<n;x++)
    {
        while(!s.empty() && s.top()>=a[x])
        {
            cout<<s.top();
            s.pop();
        }
        if(s.empty()){ continue;}
        else
        {
            s.push(a[x]);
        }

    }
}

int main()
{
    int a[]={0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
    int n=sizeof(a)/sizeof(a[0]);
    all_smallest(a,n);

    return 0;
}


它可以编译,但是没有输出,为什么?请帮助我

最佳答案

检查Wikipedia您没有正确实现算法。应该是这样的:

    #include<iostream>
    #include<stack>
    using namespace std;
    void all_smallest(int a[],int n)
    {
        stack<int>s;
        for(int x=0;x<n;x++)
        {
            while(!s.empty() && s.top()>=a[x])
            {
                s.pop();
            }
            if(!s.empty())
            {
                cout<<s.top();
            }
            s.push(a[x]);
        }
    }

    int main()
    {
        int a[]={0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
        int n=sizeof(a)/sizeof(a[0]);
        all_smallest(a,n);
        cout << "\n";
        return 0;
    }


输出:

    004022601151337

07-27 14:01