#数据结构习题
题目描述
给定一个包含 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;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!