中央値と平均値(出典:JLOJ2332)

中央値と平均値(出典:JLOJ2332)

説明
は通常、n個のソートされた数値の中央にある数値を「中央値」に入れます。これはもう少し詳細です。nが奇数の場合、中央の数値は1つだけ、つまり「中央値」です。ただし、nが偶数の場合、中間の数値が2つあり、これら2つの数値の平均を「中央値」と呼びます。次のタスクは、中央値が大きいか、すべての数値の平均が大きいかを判断することです。

入力に
は、2つの整数の間のスペースで区切られた、1行、複数の整数のみがあり、入力は0で終わります。各整数の範囲は-1000〜1000(-1000および1000を含む)であり、入力される整数の数は2000を超えません。

出力
は1行のみです。中央値が平均よりも大きい場合は「はい」が出力され、それ以外の場合は「いいえ」が出力されます。

サンプル入力
200100-100300400-2000

サンプル出力
はい

問題解決のアイデア:
整数が奇数または偶数の場合の中央値の状況に注意を払う必要があり、平均および中央値の計算結果が浮動小数点データになる可能性があり、平均値および中央値を受け取る変数を設定する必要があります浮動小数点です。
この質問で条件式を使用すると、コードの量を減らすことができます。

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[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 ++リファレンスプログラム:

#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リファレンスプログラム:

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");
	}

}

コンプリート。

おすすめ

転載: blog.csdn.net/weixin_45711556/article/details/108738911
おすすめ