代码如下:
#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