作业训练二 编程题 14. 数的距离差(qsort排序,绝对值函数)

作业训练二 编程题 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];





}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值