幼儿园组织活动,老师布置了一个任务,每个小朋友去了解与自己同一个小区的小朋友还有几个,我们将这些数量汇总到数组garden中。请根据这些小朋友给出的信息,计算小朋友至少有几个?@TOC
题目
幼儿园组织活动,老师布置了一个任务,每个小朋友去了解与自己同一个小区的小朋友还有几个,我们将这些数量汇总到数组garden中。
请根据这些小朋友给出的信息,计算小朋友至少有几个?
输入:
{2,2,3}
输出:
7
解题思路
根据输入输出和题目可得如下计算思路:
- 第一个小朋友说同小区有2个同学,那么他所在的小区在班上至少3位。
- 第二个小朋友说同小区有2个同学,那么他所在的小区在班上也是至少3位,不过第二个小朋友可能跟第一个小朋友来自同一个小区,最小原则,这个同学跟第一个同学当同小区处理。
- 第三个小朋友说同小区有3个同学,那么他所在的小区在班上也是至少4位,可见不会与前两位在同一个小区。返回最少有7位同学。
代码思路
- 处理输入
arr=list(map(int,input().split()))
# 读输入,将其分割成一个字符串列表。转换为整数列表并赋值给arr。
- 计算每个小朋友同小区人数的出现次数,目的是去掉重复的输入
mp={}
# 在函数内部,初始化一个空字典mp,用来存储每个数字及其在arr中出现的次数。
for x in arr:
# 遍历arr中的每一个元素(即数字)x。
mp[x]=mp.get(x,0)+1
# 使用mp.get(x, 0)获取x在mp中的当前值(如果x不在mp中,则返回默认值0)。然后,将这个值加1,并更新mp[x]。这样,每次循环都会增加x在mp中的计数。
- 计算最少人数
res=0
# 用来存储最终的计算结果,初始值为0。
for k,v in mp.items():
# mp中的每一个键值对,其中k是键(即同小区人数),v是值(即同小区人数出现的次数)。
part1=(v+k)//(k+1)# 小区里自己加上其他小朋友 除以自己
part2 = k+1# 加上自己
res += part1*part2
# 实际上的算是就是 v+k
print(res)
整体代码
def to_map (arr):
mp={}
for x in arr:
mp[x]=mp.get(x,0)+1
return mp
arr=list(map(int,input().split()))
mp = to_map(arr)
res=0
for k,v in mp.items():
part1=(v+k)//(k+1)
part2 = k+1
res += part1*part2
print(res)
文章介绍了幼儿园活动中,通过收集每个小朋友所在小区的小朋友数量,使用编程计算最少人数的方法,包括去重和应用数学原理。
8778

被折叠的 条评论
为什么被折叠?



