2024. 1华为od机试C卷【小朋友来自多少小区】Python

目录

题目

代码


题目

幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个.我们将这些数量汇总到数组 garden 中。
请根据这些小朋友给出的信息,计算班级小朋友至少有多少个?(至少来自几个小区)
输入描述
输入: garden = [2,2,3]
garden 数组长度最大为 999
每个小区的小朋友数量最多 1000 人,也就是 garden的范围为 [0,999]
输出描述
一个整数代表班级小朋友至少来自几个小区

示例1:

输入:

2 2 3

输出:

7

说明:
第一个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。第二个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。这两个小朋友,可能是同一小区的,且此小区的小朋友只有3个人。第三个小区反馈还有3个小朋友与自己同一小区,则这些小朋友只能是另外一个小区的。这个小区有4个小朋友。

代码

import math
from collections import Counter

lst = list(map(int, input().split(' ')))
counter = Counter(lst)
res = 0
for key, count in counter.items():
    if count <= key:
        res += key + 1
    else:
        res += (key + 1) * (math.ceil(count / (key + 1)) + count % (key + 1))
print(res)

# import math
#
# nums = [int(x) for x in input().split(" ")]
# zones = [0 for x in range(1000)]
# count = 0
#
# i = 0
# while (True):
#     if (i >= len(nums)):
#         break
#     else:
#         zones[nums[i]] += 1
#
#     i += 1
#
# for j in range(1000):
#     if (zones[i] <= 0):
#         continue
#     else:
#         total = math.ceil(zones[j] / (j + 1))
#         count += total * (j + 1)
# print(count)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值