中位数和平均数(题目来源: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参考程序:
#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