最新华为OD机试真题-小区小朋友统计(100分)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解
💻 ACM金牌🏅️|多次 AK 大厂笔试 | 编程一对一辅导
👏 感谢大家的订阅➕ 和 喜欢💗
最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测
最新华为OD机试目录: https://www.nowcoder.com/discuss/636153620743897088?sourceSSR=users
📎 在线评测链接
🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~
🍓OJ题目截图
☕️ 小区小朋友统计
问题描述
幼儿园组织了一次活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个。我们将这些数量汇总到数组 中。请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区。
输入格式
一个数组 ,表示每个小朋友反馈的与自己同一个小区的小朋友数量。
输出格式
一个整数,表示班级小朋友至少来自几个小区。
样例输入
2 2 3
样例输出
7
样例解释
第一个小朋友反馈有两个小朋友和自己同一小区,即此小区有 个小朋友。
第二个小朋友反馈有两个小朋友和自己同一小区,即此小区有 个小朋友。
这两个小朋友,可能是同一s小区的,且此小区的小朋友只有 个人。
第三个小区反馈还有 个小朋友与自己同一小区,则这些小朋友只能是另外一个小区的。这个小区有 个小朋友。
数据范围
- 数组长度最大为 。
- 每个小区的小朋友数量最多 人,也就是 的范围为 。
题解
题目要求计算班级小朋友至少来自几个小区。可以通过统计每个反馈值出现的次数,并根据反馈值计算每个小区的最小人数,最后累加这些人数得到结果。
参考代码
- Python
import math
def get_min_communities(garden):
cnts = {}
for num in garden:
cnts[num] = cnts.get(num, 0) + 1
ans = 0
for key in cnts.keys():
total = key + 1
ans += math.ceil(cnts[key] / total) * total
return ans
# 输入获取
garden = list(map(int, input().split()))
print(get_min_communities(gard
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏给大家提供了华为2024最新华为OD-E/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 部分题目提供OJ在线评测