hh真是受够了=·-·=
  • 板块P1471 方差
  • 楼主dnxba
  • 当前回复19
  • 已保存回复19
  • 发布时间2025/7/30 16:17
  • 上次更新2025/7/30 16:40:21
查看原帖
hh真是受够了=·-·=
1670834
dnxba楼主2025/7/30 16:17

代码如下:

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
long double a[10086];
long double pjs(int x,int y){
    long double h=0;
    for(int i=x;i<=y;i++){
        h+=a[i];
    }
    return h*(1/double(y-x+1));
}
long double fc(int x,int y){
    long double p=pjs(x,y),h=0;
    for(int i=x;i<=y;i++){
        h+=pow(a[i]-p,2);
    }
    return h*(1/double(y-x+1));
}
void cr(double x,double y,double k){
    for(int i=x;i<=y;i++){
        a[i]+=k;
    }
}
long double sswr(int n){
    return (n*10000+0.5)*0.0001;
}
int main(){
    long double n,m,b,x,y,k;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>b;
        if(b==1){
            cin>>x>>y>>k;
            cr(x,y,k);
        }
        if(b==2){
            cin>>x>>y;
            printf("%.4lf\n",pjs(x,y));
        }
        if(b==3){
            cin>>x>>y;
            printf("%.4lf\n",fc(x,y));
        }
        // for(int i=1;i<=m;i++){
        //     cout<<a[i]<<" ";
        // }
    }
}

让我来解释一下吧:
1.↓截取的代码↓是为了计算平均数:

long double pjs(int x,int y){
    long double h=0;
    for(int i=x;i<=y;i++){
        h+=a[i];
    }
    return h*(1/double(y-x+1));
}

2.↓截取的代码↓是为了计算方差,本人数学不行,计算过程自己都不理解·-·:

long double fc(int x,int y){
    long double p=pjs(x,y),h=0;
    for(int i=x;i<=y;i++){
        h+=pow(a[i]-p,2);
    }
    return h*(1/double(y-x+1));
}

3.↓截取的代码↓分别是为了增加或减少元素及四舍五入,若不需要可删减:

void cr(double x,double y,double k){
    for(int i=x;i<=y;i++){
        a[i]+=k;
    }
}
long double sswr(int n){
    return (n*10000+0.5)*0.0001;
}

4.↓截取的代码↓是为了测试数组是否合格,已被注释,请勿关注,也可以使用:

// for(int i=1;i<=m;i++){
//     cout<<a[i]<<" ";
// }

此代码最后输出居然是三个0·-·受够了,代码没有错误,本人使用的是C++ 14的(感觉自己好啰嗦·-·不要管hh)
不要问我为什么不写注释·-·因为我打完之后才想起来这件事·-·懒得删除之后再写了
修对必关好吗o.O

2025/7/30 16:17
加载中...