题目描述
n个信息学选手站在一排,每个选手的位置依次用1-n表示,第i个信息学选手的编程能力用一个整数Hi表示。每个信息学选手都希望找一个编程能力比自己高但又与自己编程能力最接近的选手学习,如果有多个符合条件的选手则选择位置在最前面的选手学习。请编程输出每位选手学习对象的位置,如果没有学习对象,则输出0.
输入格式
第1行一个正整数n,1<=n<=1000
第2-n+1行共n个正整数,依次表示每位选手的编程能力,1<=Hi<=1000000
输出格式
n行,每行输出一个整数,表示每个选手学习对象的位置
输入输出样例
输入 #1复制
6
3
2
6
1
1
2
输出 #1复制
3
1
0
2
2
1
说明/提示
提示:第i个选手的学习对象,就是从前往后查找一个选手j,要求Hi<Hj且Hj要尽可能小(打擂台),如果j可以取多个值,则选取最小的值(保留前面)
代码
#include <iostream>
using namespace std;
int n, i, ans, maxh, h[1001];
int main() {
cin >> n;
for (i = 1; i <= n; i++)
{
cin >> h[i];
}
for (i = 1; i <= n; i++)
{
int ans = 0, maxh = 1000001, j;
for (j = 1; j <= n; j++)
{
if (h[j] > h[i] && h[j] < maxh) {
ans = j;
maxh = h[j];
}
}
cout << ans << endl;
}
return 0;
}