随机序列
随机序列
https://ac.nowcoder.com/acm/contest/19306/1001
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
国中生Chino总是做不完数学作业,Cocoa想来帮忙,但作业太多了,怎么也做不完。
Chino的数学作业由T(1\leq T\leq 100)T(1≤T≤100)张试卷组成,每张试卷上有n(1\leq n\leq 10^3)n(1≤n≤103)个数a_{1..n}(1\leq a\leq 5000)a1..n(1≤a≤5000),Chino需要算出这些数的极差和方差。极差是一个整数,方差是一个浮点数,要求保留到小数点后3位。
虽然题目很简单,但计算量对于Chino来说实在太大啦!你能帮一帮她吗?
P.S.:一个数列的极差是指数列中最大的数减去最小的数,方差是指算出数列中每个数与数列平均值之差的平方后,对其求和,再除以数列元素个数得到的结果。
Chino的数学作业由T(1\leq T\leq 100)T(1≤T≤100)张试卷组成,每张试卷上有n(1\leq n\leq 10^3)n(1≤n≤103)个数a_{1..n}(1\leq a\leq 5000)a1..n(1≤a≤5000),Chino需要算出这些数的极差和方差。极差是一个整数,方差是一个浮点数,要求保留到小数点后3位。
虽然题目很简单,但计算量对于Chino来说实在太大啦!你能帮一帮她吗?
P.S.:一个数列的极差是指数列中最大的数减去最小的数,方差是指算出数列中每个数与数列平均值之差的平方后,对其求和,再除以数列元素个数得到的结果。
输入描述:
输入的第一行有一个数T,表示试卷的数量;接下来的每2行,第一行有一个数n,表示当前试卷上数字的个数;第二行有n个数字a_iai,表示这张试卷上的每一个数。
输出描述:
对每张试卷,输出一行两个数,分别表示这些数字的极差和方差,中间用空格分开。其中极差是整数,方差是保留到小数点后3位的浮点数。
#include<iostream>
using namespace std;int main()
{
int T,n,a[1005],x,y;
cin>>T;
while(T--)
{
cin>>n>>a[1];
x=y=a[1];
int s=a[1];
for(int i=2;i<=n;i++)
{
cin>>a[i];
x=max(x,a[i]);
y=min(y,a[i]);
s+=a[i];
}
cout<<x-y<<" ";
double t=0,p=s*1.0/n;
for(int i=1;i<=n;i++) t+=(a[i]-p)*(a[i]-p);
printf("%0.3lf\n",t/n);
}
return 0;
}