数据结构习题求解 c++

#数据结构习题

题目描述
给定一个包含 N 个数的序列 a。对于第 i 个数,如果第 j 个数满足 i < j 且 ai < aj,则认为第 j 个数是第 i 个数的瑞思拜数。对于给定序列中的每一个数,
求离它最近的瑞斯拜数。
输入格式
共 N + 1 行:
• 第 1 行:一个正整数 N,表示该序列包含 N 个数。
• 第 2 ∼ N 行:第 i + 1 行包含一个正整数 ai。
输出格式
共 N 行,第 i 行输出离 ai 最近的瑞思拜数,如果 ai 没有瑞思拜数,则输出
0。
数据规模
N ≤ 105,ai ≤ 106

求算法!


#include <iostream>
#include <vector>

using namespace std;

void fun(const vector<int> &vec,const int& ai)
{
    //找到ai在vector中的位置
    int iIndex = 0;
    for(size_t i=0;i<vec.size();i++)
    {
        if(ai == vec[i])
        {
           iIndex = i;
           break;
        }
    }
    //找到ai的瑞思拜数在vec中的位置
    int indexRuisb = 0;
    int isFind = 0;
    for(size_t i=iIndex;i<vec.size();i++)
    {
        if(iIndex < i)
        {
           if(vec[iIndex] < vec[i])
           {
               indexRuisb = i;
               isFind = 1;
               break;
           }
        }
    }
    //打印vector中元素,如果找到了ai的瑞思拜数,就在第i位打印出来ai的瑞思拜数
    //,否则就在第i位打印0
    int value = 0;
    if(isFind) value = vec[indexRuisb];
    for(size_t i=0;i<vec.size();i++)
    {
        cout<<vec[i]<<endl;
        if(i == iIndex-1)
        {
            cout<<value<<endl;
            i++;
        }
    }
    
}

int main()
{
    int N;
    cin>>N;//输入数组大小N
    //数组数组元素共N个
    int a[10];
    for(size_t i=0;i<N;i++)
    {
        cin >> a[i];
        cout<<endl;
    }
    //输入ai
    int ai;
    cin>>ai;
    //传递参数
    vector<int> v(a,a+10);
    fun(v,ai);
    return 0;
}

你题目的解答代码如下:

#include <iostream>
using namespace std;

int main()
{
    int a[107];
    int i, j, n, r;
    cin >> n;
    for (i = 0; i < n; i++)
        cin >> a[i];
    for (i = 0; i < n; i++)
    {
        r = 0;
        for (j = i+1; j < n; j++)  //条件一是 i < j 所以 j 从 i+1 开始循环
        {
            if (a[i] < a[j])
            {
                r = a[j];
                break;
            }
        }
        cout << r << endl;
    }
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img