HJ97 记负均正
发布人:shili8
发布时间:2024-12-22 19:48
阅读次数:0
**HJ97 记负均正**
**概述**
HJ97 是一个经典的算法题目,要求我们实现记负均正功能。这个功能可以帮助我们快速找到一组数字中最接近平均值但又不小于平均值的数。
**问题描述**
给定一个整数数组 `arr`,请实现一个函数 `getLeastPositive()`,返回一个整数 `ans`,使得 `ans` 是 `arr` 中所有元素的负均正,即满足以下条件:
* `ans` 不小于 `arr` 的平均值* `ans` 是 `arr` 中最接近平均值但又不小于平均值的数**示例**
输入:`arr = [1,2,3,4,5]`
输出:`ans =3`
原因:平均值为 `(1 +2 +3 +4 +5) /5 =3.0`,最接近平均值但又不小于平均值的数是 `3`。
**实现**
def getLeastPositive(arr): # 计算数组中所有元素的总和 total_sum = sum(arr) # 计算数组中所有元素的平均值 avg_value = total_sum / len(arr) # 初始化最接近平均值但又不小于平均值的数 least_positive = int(avg_value) # 如果平均值是整数,则直接返回 if avg_value == int(avg_value): return least_positive # 否则,尝试找到最接近平均值但又不小于平均值的数 else: # 初始化最接近平均值但又不小于平均值的数 closest_positive = least_positive # 尝试找到更大的数 for i in range(least_positive +1, int(avg_value) +2): if (i - avg_value) **2 < (closest_positive - avg_value) **2: closest_positive = i return closest_positive# 测试arr = [1,2,3,4,5] print(getLeastPositive(arr)) # 输出:3
**注释**
* `getLeastPositive()` 函数首先计算数组中所有元素的总和,然后计算平均值。
* 如果平均值是整数,则直接返回最接近平均值但又不小于平均值的数(即平均值本身)。
* 否则,尝试找到最接近平均值但又不小于平均值的数。首先初始化最接近平均值但又不小于平均值的数为平均值的整数部分。
* 然后,尝试找到更大的数。如果找到一个更大的数且该数与平均值之间的差值小于当前最接近平均值但又不小于平均值的数与平均值之间的差值,则更新最接近平均值但又不小于平均值的数。
* 最终,返回最接近平均值但又不小于平均值的数。