嗯...如何计算平均值然后舍入为整数?round(mean(thearray))
大多数语言都有允许您指定舍入方法的工具。
编辑:所以事实证明,这个问题实际上是关于避免溢出,而不是四舍五入。让我明确一点,我同意那些(在评论中)说这在实践中不需要担心的人,因为它很少发生,当它发生时,你总是可以使用更大的数据类型。
我看到其他几个人给出的答案基本上包括将数组中的每个数字除以数组的计数,然后将它们相加。这也是一个很好的方法。但只是为了好玩,这里有一个替代方案(在 C-ish 伪代码中):
int sum_offset = 0;
for (int i = 1; i < length(array); i++)
sum_offset += array[i] - array[i-1];
// round by your method of choice
int mean_offset = round((float)sum_offset / length(array));
int mean = mean_offset + array[0];
或另一种方法来做同样的事情:
int min = INT_MAX, max = INT_MIN;
for (int i = 0; i < length(array); i++) {
if (array[i] < min) min = array[i];
if (array[i] > max) max = array[i];
}
int sum_offset = max - min;
// round by your method of choice
int mean_offset = round((float)sum_offset / length(array));
int mean = mean_offset + min;
当然,您需要确保sum_offset
不会溢出,如果最大和最小数组元素之间的差异大于 INT_MAX,就会发生这种情况。在这种情况下,将最后四行替换为如下内容:
// round by your method of choice
int mean_offset = round((float)max / length(array) - (float)min / length(array));
int mean = mean_offset + min;
琐事:这种方法,或者类似的方法,也适用于心理计算一个数组的平均值,该数组的元素聚集在一起。