前言
推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下
「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd=6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷App,查看更方便」
希望有大神能够提供改良意见,敬礼!
---------------------------------------------------------------------------------------------------------------------------------
题目
【题目描述】
【输入格式】
【输出格式】
【样例 1 输入】
7
-4 293 0 -22 12 654 1000
【样例 1 输出】
-0.7485510379073613
0.04504284674812264
-0.7378629047806881
-0.7966476369773906
-0.7057985054006686
1.0096468614303775
1.9341703768876082
【样例 1 解释】
【样例 2 输入】
【样例 2 输出】
【样例 2 解释】
【子任务】
思路分析:
本题的思想比较简单,直接按照公式计算就可以,一开始还误以为是每一个f(i)都要单独计算i之前的标准差和平均值,后来意识到只需要算整体的就可以。
误差的话一般采用长数据类型就可以避免了,理论上计算过程中间存储的点越少越精确,但是为了思路清晰用了很多中间变量。
标准差使用pow函数就可以计算。
代码如下:
#include <bits/stdc++.h>//万能头文件
using namespace std;
//运行结果为nan 表示 not a number 一般都是运算出了逻辑错误,比如除了0int main() {int n=0;//n是数字的个数(数组长度) long double result=0;//存储结果 //const int N=10000;cin>>n; long double b[n]; //数组,存储数据 long double sum=0.0;//和for(int i=0;i<n;i++){//输入 cin>>b[i]; sum+=b[i];}long double average=sum/n;//计算出平均值long double fang=0.0;//方 for(int i=0;i<n;i++){fang+=(b[i]-average)*(b[i]-average);}long double dfang=fang/n;//计算出方差 long double dfangdown=pow(dfang,0.5);for(int i=0;i<n;i++){result=(b[i]-average)/dfangdown;//计算出结果 cout<<result<<endl; } //关于浮点数比较 《算法笔记》p75有介绍 return 0;
}