首页 > 试题广场 >

分糖果

[编程题]分糖果
  • 热度指数:1413 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

n 个小朋友坐在一排,每个小朋友拥有 ai 个糖果,现在你要在他们之间转移糖果,使得最后所有小朋友拥有的糖果数都相同,每一次,你只能从一个小朋友身上拿走恰好两个糖果到另一个小朋友上,问最少需要移动多少次可以平分糖果,如果方案不存在输出 -1


输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数n(1 <= n <= 100),接下来的一行包含n个整数ai(1 <= ai <= 100)。


输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
示例1

输入

4
7 15 9 5

输出

3
while True:
    try:
        n=int(input())
        ls=list(map(int,input().split()))
        summ=sum(ls)
        if summ%n==0 and sum(abs(a-summ/n)%2==0 for a in ls)==n:
            print(int(sum(abs((a-summ/n)/2) for a in ls)/2))
        else:
            print(-1)
    except:
        break

发表于 2021-02-23 21:58:30 回复(0)
n = int(input())
read_list = list(map(int, input().split()))
ava = sum(read_list)/n
count = 0
for num in read_list:
    if ava % 2 != 0 and num % 2 == 0:
        count = -1
        break
    elif ava % 2 == 0 and num % 2 != 0:
        count = -1
        break
    if num > ava: #如果上述条件都不满足,则必存在解
        while num != ava:
            num -= 2
            count += 1
print(count)
AC的Python解,很简单明了
发表于 2020-04-25 18:23:15 回复(1)