题解:P13910 [CSPro 26] 归一化处理

· · 题解

题目大意已经很简明了。自己看。

https://www.luogu.com.cn/problem/P13910

思路

一道比较简单的模拟题。

根据题目的意思,先求出平均值:

\bar{a}=\dfrac{a_1+a_2+\cdots+a_n}{n}

再求出方差:

D(a)=\dfrac{1}{n}\sum\limits_{i=1}^n(a_i-\bar{a})^2

这两个值是不随 i 的变化而变化的,所以可以在读入数据之后先计算这两个数。

有了这两个值之后,我们需要对于每个 i,输出 f(a_i)=\dfrac{a_i-\bar{a}}{\sqrt{D(a)}}

代码

参考代码如下。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n;
    cin>>n;
    double sum=0,a[n];
    for(long long i=0;i<n;i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    double ave=sum/n/1.00;
    sum=0;
    for(long long i=0;i<n;i++)
    {
        sum+=(a[i]-ave)*(a[i]-ave);
    }
    double da=1.00/n*sum;
    da=sqrt(da);
    for(long long i=0;i<n;i++)
    {
        cout<<setprecision(10)<<(a[i]-ave)/da<<endl;
    }
    return 0;
}