作业训练二 编程题 14. 数的距离差
作业训练二
编程题
14. 数的距离差
【问题描述】
给定一组正整数,其中最大值和最小值分别为Max和Min, 其中一个数x到Max和Min的距离差定义为:
abs(abs(x-Max)-(x-Min))
其中abs()为求一个数的绝对值
【输入形式】
包括两行,第一行一个数n,表示第二行有n个正整数
【输出形式】
输出一个数x,该数在所有n个数中的距离差最小;如果有两个数的距离差都是最小,输出较小的哪个
【样例输入1】
5
3 1 7 5 9
【样例输出1】
5
【样例输入2】
3
1 3 2
【样例输出2】
2
相关知识:
1.
qsort详解 link
其中qsort参数函数中若return e1-e2,则为从小到大升序排列,反之则为降序排列。
2.
绝对值函数:
整型:
int abs(int i) //返回整型参数i的绝对值
复数:
double cabs(struct complex znum) //返回复数znum的绝对值
双精度浮点型:
double fabs(double x) //返回双精度参数x的绝对值
长整型:
long labs(long n) //返回长整型参数n的绝对值
解代码
#include<iostream>
using namespace std;
int cmp(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
int abs(int i)
{
if (i >= 0)
{
return i;
}
else
{
return -i;
}
}
int main()
{
int n;
cin >> n;
int* a = new int[n]();
int* c = new int[n]();
int* b = new int[n]();
for (int i = 0; i < n; i++)
{
cin >> a[i];
c[i] = a[i];
}
qsort(c, n, sizeof(int), cmp);
int min = c[0];
int max = c[n-1];
for (int i = 0; i < n; i++)
{
b[i] = abs(abs(a[i] - max) - (a[i] - min));
}
int Min,tmpi=0;
Min = b[0];
for (int i = 0; i < n; i++)
{
if (b[i] < Min)
{
Min = b[i];
tmpi = i;
}
}
int time=0;
for (int i = 0; i < n; i++)
{
if (b[i] ==Min)
{
time++;
}
}
int* d = new int[time];
int z = 0;
for (int i = 0; i < n; i++)
{
if (b[i] == Min)
{
d[z]=a[i];
z += 1;
}
}
qsort(d,time,sizeof(int),cmp);
cout << d[0];
}