前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中位数和平均数(题目来源:JLOJ2332)

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

作者头像
英雄爱吃土豆片
发布2020-10-29 11:06:36
8880
发布2020-10-29 11:06:36
举报
文章被收录于专栏:英雄爱吃土豆片

中位数和平均数(题目来源: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");
	}

}

毕。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 中位数和平均数(题目来源:JLOJ2332)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档