题解 | #数组分组#

# 输入int型数组,询问该数组能否分成两组,使得两组中各元素加起来的和相等,
# 并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),
# 不是5的倍数也不是3的倍数能放在任意一组,可以将数组分为空数组,能满足以上条件,输出true;不满足时输出false。

# 先将5的倍数放到一个数组:求出和
# 再将3的倍数放到另一个数组:求出和
# 余下的数用来平衡两个数组达到值相等
def eq(five,three,other):
    if not other: # other是空的
        if sum(five) == sum(three):
            return True
        else:
            return False
    elif eq(five + other[:1],three,other[1:]):
            return True
    elif eq(five,three + other[:1],other[1:]):
            return True

alls = []  # 存放所有值
five = []  # 存放5的倍数
three = [] # 存放3的倍数
other = [] # 存放其他的值
n = int(input())
alls = list(map(int, input().split()))
for i in alls:
    if i % 5 == 0:
        five.append(i)
    elif i % 3 == 0:
        three.append(i)
    else:
        other.append(i)
if eq(five, three, other):
    print('true')
else:
    print('false')

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 10:52
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务