【无标题】

文章介绍了幼儿园活动中,通过收集每个小朋友所在小区的小朋友数量,使用编程计算最少人数的方法,包括去重和应用数学原理。

幼儿园组织活动,老师布置了一个任务,每个小朋友去了解与自己同一个小区的小朋友还有几个,我们将这些数量汇总到数组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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值