jzoj 1576. 【普及模拟】自动统计机

发布于 2019-03-20  1103 次阅读


题目描述

奶牛们最近在学习统计学理论,但那些机械烦琐的对数据的统计分析几乎把她们搞疯了。于是奶牛们找到了你,希望你能帮帮她们。

    你拿到了一张写着N (1 <= N <= 500)个数的表,表中第i个数字为X_i (-5,000 <= X_i <= 5000),你的任务是计算如下两个值:

    * 所有数的平均数(所有数的和除以N)

    * 所有数的中位数(如果N是奇数,中位数为排序后的数列里位于正中的那个;如果N是偶数,中位数是排序后的数列位于正中的两个数的平均数)

    答案保留6位小数。

 

输入

* 第1行: 1个正整数N

* 第2..N+1行: 第i+1为1个整数:X_i

输出

* 第1行: 输出所有数的平均数

* 第2行: 输出所有数的中位数

很水的一题就是一个实型的数组排序然后找中位数

var
  b:array[0..100000] of real;
  i,j,k,n,m:longint;
  s,t:real;
begin
  assign(input,'stats.in');reset(input);
  assign(output,'stats.out');rewrite(output);
  readln(n);
  for i:=1 to n do
  begin
    readln(b[i]);
    s:=s+b[i];
  end;
  for i:=1 to n do
    for j:=1 to n-1 do
      begin
        if b[j]>b[j+1] then
          begin
            t:=b[j];
            b[j]:=b[j+1];
            b[j+1]:=t;
          end;
      end;

  writeln(s/n:0:6);
  if n mod 2=1 then writeln(b[n div 2+1]:0:6)
    else writeln((b[n div 2]+b[n div 2+1])/2:0:6);
end.