【题目描述】
n 个ACM选手站在一排,每个选手的位置依次用 1~n 表示,第 i 个ACM选手的编程能力用一个整数 H i 表示。每个ACM选手都希望找一个编程能力比自己高但又与自己编程能力最接近的选手学习,如果有多个符合条件的选手则选择位置在最前面的选手学习。请编程输出每位选手学习对象的位置,如果没有学习对象,则输出 0。
【输入格式】
第1行一个正整数 n(1≤n≤1000);
第2~n+1 行共 n 个正整数,依次表示每位选手的编程能力,1≤H i ≤1000000。
【输出格式】
共n 行,每行输出一个整数表示每个选手学习对象的位置。
例如:
输入 | 结果 |
---|---|
6 3 2 6 1 1 2 | 3 1 0 2 2 1 |
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
#include<cmath>
#include<iomanip>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<stdio.h>
#include<cstdio>
#include<cstring>
#include<map>
#define M 1000
using namespace std;
long long int a[M + 5], f[M+5]={0};
int main()
{
int n,i,j;
scanf("%d", &n);
for (i = 1; i <=n; i++)
{
scanf("%lld", &a[i]);
}
for (i = 1;i <= n; i++)
{
int x = 2000000,s1=0;
int y = 2000000,s2=0;
for (j = i; j <= n; j++)//从i后面找
{
if (a[j] > a[i])
{
if (a[j] - a[i] < x - a[i])
{
x = a[j];
s1 = j;
}
}
}
for (j = 1; j <=i; j++)//从i前面找
{
if (a[j] > a[i])
{
if (a[j] - a[i] < y - a[i])
{
y = a[j];
s2 = j;
}
}
}
if (x < y)
{
printf("%d\n", s1);
}
if (x == y)
{
printf("%d\n", s2);
}
if (x > y)
{
printf("%d\n", s2);
}
}
return 0;
}