首页 > 试题广场 >

糖果谜题

[编程题]糖果谜题
  • 热度指数:6541 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小明是幼儿园的一名老师。某天幼儿园园长给小朋友们每人发一颗糖果,小朋友们拿到后发现有一些同学拿到的糖果颜色和自己相同,有一些同学糖果颜色和自己不同。
假定每个小朋友只知道有多少同学和自己拿到了相同颜色的糖果。
上课后,有一部分小朋友兴奋的把这一结果告诉小明老师,并让小明老师猜一猜,最少有多少同学拿到了糖果。
例如有三个小朋友告诉小明老师这一结果如下:
其中第一个小朋友发现有1人和自己糖果颜色一样,第二个小朋友也发现有1人和自己糖果颜色一样,第三个小朋友发现有3人和自己糖果颜色一样。
第一二个小朋友可互相认为对方和自己颜色相同,比如红色;
第三个小朋友不可能再为红色(否则第一二个小朋友会发现有2人和自己糖果颜色相同),假设他拿到的为蓝色糖果,那么至少还有另外3位同学拿到蓝色的糖果,最终至少有6位小朋友拿到了糖果。
现在请你帮助小明老师解答下这个谜题。

输入描述:
假定部分小朋友的回答用空格间隔,如 1 1 3


输出描述:
直接打印最少有多少位小朋友拿到糖果
如 6
示例1

输入

1 1 3

输出

6
示例2

输入

0 0 0

输出

3

说明

三位小朋友都没发现有人和自己的颜色相同,所以最少的情况就是三位小朋友糖果的颜色均不同

备注:
其中回答学生个数最多1000
每个学生回答的答案在[0,999]之间
import math
v=list(map(int,input().split()))
v.sort()
count=0
i=0
while i <len(v):
    n=v.count(v[i])
    count=count+math.ceil(n/(v[i]+1))*((v[i]+1))
    i=i+n
print(count)

发表于 2020-05-26 10:38:09 回复(0)
import math
nums = list(map(int,input().split()))
res = 0
dicts = {}
for num in nums:
    if num not in dicts:
        dicts[num] = 1
    else:
        dicts[num] +=1
for key in dicts:
    if key == 0:
        res+=dicts[key]
    else:
        res+= (key+1)*math.ceil(dicts[key]/(key+1))
print(res)
用哈希表记录数字出现的次数。
一开始没有用哈希表做,直接用set删除重复数字,但是,例如:4 4 4 4 4 4 4 4的情况,就没有考虑到。
发表于 2020-05-05 13:18:39 回复(0)
inp = list(map(int, input().strip().split()))
inp.sort()
a = []
b = []
count = 0
for i in range(len(inp)):
    if inp[i] not in a:
        a.append(inp[i])
        num = inp.count(inp[i])
        b.append(num)
for i in range(len(a)):
    if b[i] <= a[i] + 1:
        count += a[i] + 1
    else:
        num = b[i] // (a[i] + 1)
        if b[i] % (a[i] + 1) == 0:
            count += (a[i] + 1) * num
        else:
            count += (a[i] + 1) * (num + 1)
print(count)


发表于 2020-04-10 22:20:51 回复(0)
"""
思路:看相同的数字a可以构成几个团块,每个团块的最多数量是a+1
1.哈希计算数字的个数
2.遍历哈希表,假设2的个数5,即:222 22;前3个2可以构成一个团,后面两个2可以构成一个团,
每个团最多2+1个小朋友,所以共有6个;团个数可用除法和求余的方法计算
3.累加每个数字计算得到最终结果
"""
import sys

nums = list(map(int, input().strip().split()))

hashlist = {}
for num in nums:
    hashlist[num] = hashlist.get(num, 0) + 1

res = 0
for key, val in hashlist.items():
    tmp = val // (key+1)
    res += tmp*(key + 1) if val % (key+1) == 0 else (tmp+1)*(key+1)
print(res)

发表于 2019-09-06 21:52:07 回复(0)
""""
求和 及 条件判断
"""

if __name__ == "__main__":
    a = list(map(int, input().strip().split()))
    ans = len(a)
    a.sort()
    cnt = temp = 0
    for i in range(len(a)):
        if cnt == 0:
            temp = a[i]
        if temp == a[i]:
            cnt += 1
        else:
            ans += temp - cnt + 1
            cnt = 1
            temp = a[i]
        if cnt > temp:
            cnt = 0
    if cnt > 0:
        ans += temp - cnt + 1
    print(ans)

发表于 2019-07-13 10:41:06 回复(0)