给定一个算法,其输入是一个整数集S和一个整数m,输出是和为m的所有S的子集,算法步骤如下:
(1)列出S的全部子集,求他们的和。
(2)逐个查看步骤(1)列出的子集,把每个和等于m的子集输出。
# @Time : 2020/2/21
# @File : firstwork.py
# @Author : Snipe
# @Contact : visonarydo@163.com
# @Software : Window10 + Python3.6 + PyCharm
import numpy as np
# 将所有输入整数的子集列出
def getArraySubSet(originArray):
result = [[]]
for i in range(len(originArray)):
for j in range(len(result)):
result.append(result[j]+[originArray[i]]) #现有每个子集中添加新元素,作为新子集加入结果集中
result.remove([])
return result
# 获取输入
S = input("请输入一个整数集S,元素以空格分开:")
S = S.split()
S_len = len(S)
for s in range(0, S_len):
S[s] = int(S[s])
m = int(input("请输入一个整数m:"))
subset = getArraySubSet(S)
subset_len = len(subset)
# 逐个查看各个子集,将各子集和同输入m比较,并输出题中所需
for i in range(0, subset_len):
sum = 0
for j in range(0, len(subset[i])):
sum += subset[i][j]
if sum == m:
print(subset[i])
# print(subset)
# print(subset[2][1])
# print(len(subset[2]))
# print(len(subset))
# subset = np.array(subset)
# print(subset.shape)