华为机试HJ93数组分组

华为机试HJ93数组分组

题目:

给定一个数组,将其分为两个数组,其中3和5的倍数不能在一组中,问是否可以分配和相等的两个数组,若可以则输出true,否则false。

想法:

递归的思想,先将3和5的倍数分别分在不同的数组中,再从剩下的数值中一个个放入不同的数组中进行尝试即可。

import sys

# 取出数据
count = 1
number_list = []
for line in sys.stdin:
    a = line.split()
    if count == 1:
        number = int(a[0])
    else:
        number_list = a
    count += 1
number_list = [int(x) for x in number_list]

# 递归函数
def add(a_5, a_3, number_list):
    if number_list == []:
        if sum(a_5) == sum(a_3):
            return True
        else:
            return False
    else:
        return add(a_5+number_list[:1], a_3, number_list[1:]) or add(a_5, a_3+number_list[:1], number_list[1:])

a_5 = []
a_3 = []
a = []
for i in number_list:
    if int(i) % 5 == 0:
        a_5.append(int(i))
    elif int(i) % 3 == 0:
        a_3.append(int(i))
    else:
        a.append(int(i))

# 输出判断
if add(a_5, a_3, a):
    print('true')
else:
    print('false')

你可能感兴趣的:(数组,递归,python,数据结构)