CCF-Csp算法能力认证,202206-1归一化处理(C++)含解析

前言

推荐书目,在这里推荐那一本《算法笔记》(胡明),需要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  一般都是运算出了逻辑错误,比如除了0
 

int 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;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值