题目描述:
从n个人中选出一部分人,然后,在这一部分人中选一个队长,共有多少种选法?
其实就是一个排列组合的问题,组合各种可能,然后在组合好的人选里选择一个数。
num = int(input())
b =[]
a =''
for n in range(1,num+1):
b.append(n)
for i in b:
a += ''.join(str(i))
import itertools
list1 = a
list2 =[]
for i in range(1,len(list1)+1):
iter = itertools.combinations(list1,i)
list2.append(list(iter))
count =0
for j in list2:
for k in j:
print(j)
count +=len(k)*1
print(k)
print(count)
方法二
def getBinaryRep(n, numDigits):
"""假设n和numDigits为非负整数
返回一个长度为numDigits的字符串,为n的二进制表示"""
result = ''
while n > 0:
result = str(n%2) + result
n = n//2
# if len(result) > numDigits:
# raise ValueError('not enough digits')
for i in range(numDigits - len(result)):
result = '0' + result
return result
print(getBinaryRep(6,4))
def genPowerset(L):
"""假设L是列表返回一个列表,包含L中元素所有可能的集合。例如,
如果L=[1, 2],则返回的列表包含元素[1]、[2]和[1,2]"""
powerset = []
for i in range(1, 2**len(L)):
binStr = getBinaryRep(i, len(L))
subset = []
for j in range(len(L)):
if binStr[j] == '1':
subset.append(L[j])
powerset.append(subset)
return powerset
L = [1,2,3]
A= genPowerset(L)
count = 0
for i in A:
count += len(i)
print(count)