UVA10057

给出一一串数字,问哪一个数字A可以使A和所有数字相减 的和最小。 输出的三个是:这个数是什么,给出的数字中满足的有几个,总共有几种数字可以满足(没出现也行)

其实就是把这些数字排序,中间那个数就是答案,如果数字是奇数个,那么答案肯定只有一个,就是中间那个数,给出的书中满足的有几个就遍历比较就行,

如果是偶数个,那么中间两个数字都行,两个数字之间的数也行,那么满足的数字的种数 就是中间两个数之间有多少数。


AC代码:


#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1000005;
int num;
int res[N];

int main () {
	int a,b,c;
	while(cin >> num) {
		b = c = 0;
		for (int i = 0 ; i < num ;i++) {
			cin >> res[i];
		}
		sort(res , res + num);
		if (num % 2 == 0) {
			int tar1 = res[(num / 2 ) - 1];
			int tar2 = res[num / 2];
			a = tar1;
			int m1 = tar1 >= tar2 ? tar1 : tar2;
			int m2 = tar1 <= tar2 ? tar1 : tar2;
			for (int i = 0 ; i < num ;i++) {
				if (res[i] >= m2 && res[i] <= m1) {
					b++;
				}
			}
			c = m1 - m2 + 1;
		}
		else {
			int tar = res[num / 2];
			c = 1;
			a = tar;
			for (int i = 0 ; i < num ;i++) {
				if (res[i] == tar)
					b++;
			}
		}
		cout << a << " "<< b << " " << c << endl;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值