中位数和平均数(题目来源:JLOJ2332)

2020-10-29 11:06:36 浏览数 (1)

中位数和平均数(题目来源:JLOJ2332)

Description 通常把在 n 个排好序的数中,位于最中间的数就走“中位数”,这里再规定细一点,如果 n 是奇数,那么最中间的数只有一个,那就是“中位数”,但如果 n 是偶数,那么最中间的数有两个,我们把这两个数的平均数也叫作“中位数”。下面的任务是判断中位数大,还是所有数的平均数大。

Input 输入只有一行,若干个整数,前后两个整数之间用空格隔开,输入以 0 结束。每个整数的范围为 -1000 ~ 1000(含 -1000 和 1000),输入的整数个数不超过2000.

Output 输出只有一行,如果中位数比平均数大,那么输出 Yes,否则输出 No。

Sample Input 200 100 -100 300 400 -200 0

Sample Output Yes

解题思路: 需要注意整数个数分别为奇数或偶数时中位数的情况,以及平均数和中位数计算的结果可能为浮点型数据,需要将接收平均数和中位数的变量设置为浮点型。 本题运用条件表达式可以减少部分代码量。

C参考程序:

代码语言:javascript复制
#include <stdio.h>
#include <stdlib.h>

int compar(const void* a, const void* b) {
	return *(int*)a - *(int*)b;
}

int main() {
	int arr[2001];
	int len = 0, sum = 0;
	double avg, mid;
	
	while (scanf("%d", &arr[len]) && arr[len]) {
		sum  = arr[len];
		len  ;
	}
	
	qsort(arr, len, sizeof(int), compar);
	
	avg = (sum * 0.1) / len;
	mid = len % 2 == 0 ? ((arr[len / 2]   arr[len / 2 - 1]) / 2.0) : (arr[len / 2]);
	
	printf("%s", mid > avg ? "Yes" : "No");
	
	return 0;
} 

C 参考程序:

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	vector<int> arr;
	int value, sum = 0;
	double avg, mid;
	
	while (cin >> value && value) {
		arr.emplace_back(value);
		sum  = value;
	}
	
	sort(arr.begin(), arr.end());
	
	int len = arr.size();
	
	avg = (sum * 1.0) / len;
	mid = len % 2 ? (arr[len / 2]) : ((arr[len / 2]   arr[len / 2 - 1]) / 2.0);
	
	cout << (mid > avg ? "Yes" : "No");
	
	return 0;
}

Java参考程序:

代码语言:javascript复制
import java.util.*;

public class test {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		int[] arr = new int[2001];
		int val = 1, sum = 0, LEN = 0;
		double mid, avg;
		
		while (val != 0) {
			val = in.nextInt();
			arr[LEN] = val;
			sum  = val;
			LEN  ;
		}
		LEN -= 1;
		
		for (int i = 0; i < LEN - 1; i  ) {
			for (int j = i   1; j < LEN; j  ) {
				if (arr[i] > arr[j]) {
					int c = arr[i];
					arr[i] = arr[j];
					arr[j] = c;
				}
			}
		}
		
		avg = sum / LEN;
		if (LEN % 2 == 0) {
			mid = (arr[LEN / 2]   arr[LEN / 2 - 1]) / 2;
		} else {
			mid = arr[LEN / 2];
		}
		
		System.out.println(mid > avg ? "Yes" : "No");
	}

}

毕。

0 人点赞