#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int arr[1000000] = { 0 };
int main()
{ // 总个数
int num = 0; cin >> num;
// 标准差
long double s = 0;
// 目标金额
long double sum = 0; scanf("%Lf", &sum);
// 初始平均值
long double aver = sum / num;
// 剩下的个数
int t_n = num;
// 输入数据
for (int i = 0; i < num; i++)
{
int temp = 0; scanf("%d", &temp);
arr[i] = temp;
}
// 排序
sort(arr, arr + num);
// 逐个遍历
for (int i = 0; i < num; i++)
{
// 计算剩下数据的平均值
long double t_aver = sum / t_n;
if (arr[i] <= t_aver)
{
sum -= arr[i];
s += (arr[i] - aver)* (arr[i] - aver);
}
else
{
sum -= t_aver;
s += (t_aver - aver)*(t_aver - aver);
}
t_n--;
}
printf("%.4Lf\n", sqrt(s / num));
return 0;
}
P8664 [蓝桥杯 2018 省 A] 付账问题(贪心+排序)
最新推荐文章于 2024-09-12 19:02:20 发布
这篇文章详细描述了一个C++程序,用于计算一组整数数组的标准差,通过遍历并根据当前数值和剩余平均值调整支付,以实现特定的分配策略。
摘要由CSDN通过智能技术生成