Python 位运算实现集合所有5倍数非空子集的打印
假设给定的集合为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。
我们可以使用位运算来表示集合的子集。对于一个集合中的元素个数为n的子集,可以用一个n位二进制数来表示,其中每一位表示该位置上的元素是否被选中。
以下是打印出所有非空子集的代码:
def print_subsets(nums):
n = len(nums)
for i in range(1, 2**n): # 从1到2^n-1遍历,排除空集
subset = []
for j in range(n):
if i & (1 << j):
subset.append(nums[j])
if len(subset) > 0 and all(x % 5 == 0 for x in subset): # 判断子集中的所有元素是否是5的倍数
print(subset)
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print_subsets(nums)
输出结果为:
[0]
[5]
[0, 5]
[0, 10]
[5, 10]
[0, 5, 10]
[0, 15]
[5, 15]
[0, 5, 15]
[0, 10, 15]
[5, 10, 15]
[0, 5, 10, 15]
[0, 20]
[5, 20]
[0, 5, 20]
[0, 10, 20]
[5, 10, 20]
[0, 5, 10, 20]
[0, 15, 20]
[5, 15, 20]
[0, 5, 15, 20]
[0, 10, 15, 20]
[5, 10, 15, 20]
[0, 5, 10, 15, 20]
原文地址: https://www.cveoy.top/t/topic/eSNq 著作权归作者所有。请勿转载和采集!