7-27 样本方差

7-27 样本方差

分数 15

作者 ldm

单位 成都信息工程大学

u=3226723262,278720713&fm=15&gp=0.jpg

作为概率论随便考100分的你,口算出给定样本的方差自然也不在话下,不过今天需要你编程实现这样的程序。

样本方差:S2=n−11∑i=1n(X**iXˉ)2

样本均值:Xˉ=n1∑i=1nXi

输入格式:

输入共两行。

第一行为一个正整数n,(2≤n≤10000),即给定样本的数量。

第二行为n个整数,为每个样本的值。

输出格式:

输出仅 1 行,为计算出来的样本方差(保留 2 位小数,不足用 0 补齐)。

输入样例:

4
974 559 974 233

输出样例:

129074.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

代码

#include <bits/stdc++.h>
using namespace std;

// 计算均值
double averageNum(vector<int> numBag)
{
    int sumNum = 0;
    for (int num : numBag)
    {
        sumNum += num;
    }
    double avgNum = sumNum * 1.0 / numBag.size();
    return avgNum;
}

// 计算方差
double sampleVariance(vector<int> numBag, double avgNum)
{
    double tempSum = 0.0;
    for (int tempNum : numBag)
    {
        // 计算平方的和
        tempSum += pow(tempNum - avgNum, 2);
    }
    double sampVari = tempSum / (numBag.size() - 1);
    return sampVari;
}

int main()
{
    int n;
    cin >> n;
    vector<int> numBag;
    // 输入数字
    for (int i = 0; i < n; i++)
    {
        int tempNum;
        cin >> tempNum;
        numBag.push_back(tempNum);
    }
    // 计算样本均值
    double avgNum = averageNum(numBag);
    // 计算样本方差
    double sampVari = sampleVariance(numBag, avgNum);
    cout << fixed << setprecision(2) << sampVari << endl;
    return 0;
}

优化代码

#include <bits/stdc++.h>
using namespace std;

// 计算均值
double averageNum(const vector<int>& numBag)
{
    // return accumulate(numBag.begin(), numBag.end(), 0) *1.0/ numBag.size();
    return accumulate(numBag.begin(), numBag.end(), 0.0) / numBag.size();
}

// 计算方差
double sampleVariance(vector<int> numBag, double avgNum)
{
    double tempSum = 0.0;
    for (int tempNum : numBag)
    {
        // 计算平方的和
        tempSum += pow(tempNum - avgNum, 2);
    }
    double sampVari = tempSum / (numBag.size() - 1);
    return sampVari;
}

int main()
{
    int n;
    cin >> n;
    vector<int> numBag(n);
    // 输入数字
    for (int i = 0; i < n; i++)
    {
        cin >> numBag[i];
    }
    // 计算样本均值
    double avgNum = averageNum(numBag);
    // 计算样本方差
    double sampVari = sampleVariance(numBag, avgNum);
    cout << fixed << setprecision(2) << sampVari << endl;
    return 0;
}
  • 创建函数时,不会改变的值学会使用const传递,同时使用&避免不必要的复制,提升性能
  • 使用accumulate()计算vector中所有元素的和,初始值为0则为整数,初始值为0.0则最后为浮点数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值