华为OD算法题python
时间: 2024-12-30 15:32:11 浏览: 5
### 华为 OD 算法题 Python 实现
#### 题目一:新学校选址
此题目旨在找到最优位置来建立新的学校,使得所有学生到学校的最大距离最小化。给定一系列学生的坐标,求解最佳的新学校位置。
对于该问题的一种解决方案如下:
```python
def find_best_location(students):
students.sort() # 对学生的位置进行排序[^2]
n = len(students)
if n % 2 == 0:
median_low = students[n // 2 - 1]
median_high = students[n // 2]
best_location = (median_low + median_high) / 2
else:
best_location = students[n // 2]
return best_location
if __name__ == "__main__":
student_positions = [int(x) for x in input().strip().split()]
result = find_best_location(student_positions)
print(result)
```
上述代码实现了寻找最优点的过程,即计算中位数作为新建学校的理想地点。当有偶数个数据点时,则取中间两个数值平均值;奇数情况下直接选取位于中央的数据点作为结果。
#### 题目二:处理输入并输出特定格式的结果
另一个常见的华为OD编程测试案例涉及如何有效地读入一组整数,并按照一定规则对其进行操作后返回期望形式的答案。下面是一个简单的例子展示怎样完成这样的任务:
```python
import sys
def process_input():
lines = []
try:
while True:
line = input()
if not line:
break
lines.append(line.strip())
except EOFError:
pass
processed_data = []
for i, l in enumerate(lines):
numbers = list(map(int, filter(None, l.split(' '))))
processed_data.extend(numbers)
return processed_data
def main():
data_points = process_input()
output_formatting(data_points)
def output_formatting(nums):
nums_sorted = sorted(nums)
length_of_nums = len(nums_sorted)
if length_of_nums % 2 != 0:
index_to_print = length_of_nums // 2
value_to_output = str(nums_sorted[index_to_print])
else:
lower_mid_index = (length_of_numbs := length_of_nums//2)-1
upper_mid_index = length_of_nums // 2
avg_value = sum([nums_sorted[lower_mid_index], nums_sorted[upper_mid_index]]) / 2.0
value_to_output = f"{avg_value:.1f}"
print(value_to_output)
if __name__ == '__main__':
main()
```
这段程序展示了从标准输入流获取多行数字字符串的方法,并将其转换成列表中的整型元素。之后对这些整数进行了升序排列,并依据数量是单数还是双数决定最终要打印出来的代表性的单一数值或是两者均值的小数表示[^1]。
阅读全文