【问题描述】
一个数列的平均方差是指数列中的每个元素与数列的平均值的差的平方和的平均值,比如下面数列:
1 2 3 4 5 6 7
其平均值为4,每个元素与平均值的差的平方为
9 4 1 0 1 4 9
其平方和为28,所以该数列的平均方差为4。
对给定的数列,求出其平均方差。
【输入形式】
有多组测试数据。
每组测试数据第一行是一个正整数N,表示数列中元素个数,接下来一行N个用空格分隔开的正整数,表示数列的N个元素,每个元素的值都是不大于500的正整数。
N=0表示输入结束,并且不需要处理。
40%的数列元素个数N 1 ≤ N≤ 10;
30%的数列元素个数N 1 ≤ N≤ 100;
20%的数列元素个数N 1 ≤ N≤ 1000;
10%的数列元素个数N 1 ≤ N≤ 10000;
【输出形式】
对于每组测试数据,输出一个整数:平均方差。平均方差不是整数的,输出其向下取整的整数。比如平均方差是4.5,输出4。
【样例输入】文章来源:https://www.toymoban.com/news/detail-492948.html
7 1 2 3 4 5 6 7 4 1 2 3 4 0
【样例输出】文章来源地址https://www.toymoban.com/news/detail-492948.html
4 1
在C++中,可以使用类型转换或者数学函数来实现向下取整操作。
使用类型转换:
可以将 float 类型的变量强制转换为 int 类型,强制转换会丢弃小数部分,实现向下取整。
float num = 3.7;
int result = static_cast<int>(num); // 向下取整,结果为3
使用数学函数:
使用 floor() 函数可以向下取整,返回小于或等于给定浮点数的最大整数。
#include <cmath>
float num = 3.7;
int result = std::floor(num); // 向下取整,结果为3
请注意,这些方法都会将浮点数向下取整为最接近但不大于原始值的整数。如果需要将浮点数向下取整为最接近且小于原始值的整数,可以使用 std::floor() 函数配合减一操作实现:
#include <cmath>
float num = 3.7;
int result = std::floor(num - 1); // 向下取整,结果为2
需要包含 <cmath> 头文件来使用 std::floor() 函数。
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int main()
{
while(1)
{
int n;
cin>>n;
if(n==0)
{
break;
}
float a[n];
float average=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
average+=a[i];
}
average/=n;
float ans=0;
for(int i=0;i<n;i++)
{
ans+=(a[i]-average)*(a[i]-average);
}
ans/=n;
ans=floor(ans);
cout<<ans<<endl;
}
return 0;
}
到了这里,关于湖大CG满分教程:作业训练一编程题11. 平均方差的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!