0
点赞
收藏
分享

微信扫一扫

UVA - 10057 A mid-summer night's dream. 求中位数


题目大意:给出一系列的数字,要求求出中位数是

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int num[1000000];

int main() {
	int n,min,max,sum;
	while(scanf("%d",&n) != EOF) {
		
		for(int i = 0; i < n; i++)
			scanf("%d",&num[i]);
		sort(num,num+n);
		if(n % 2) {
			sum = 1;
			min = num[n/2];
			max = min;	
		}else{
			sum = num[n/2] - num[n/2-1] + 1;
			max = num[n/2];
			min = num[n/2-1];	
		}

		int count = 0;
		for(int i = 0 ; i < n; i++){
			if(num[i]>= min && num[i] <= max)
				count++;
			if(num[i] > max)
				break;				
		}
		printf("%d %d %d\n",min,count,sum);
	}
	return 0;
}


多少,以及能成为中位数的数有几个和中位数中间有几个值,如果数是奇数的话,中间那个以及和他想等的数都能成为中位数,如果时偶数个的话,取中间的两个,满足在他们两个数中间的数也能成为中位数

解题思路:先从小到大排列,就能快速找到中位数,再去判断能成为中位数的有几个

举报

相关推荐

0 条评论