每天早上做早操,有一个《上海童谣-小皮球》,需要围成圈的孩子们两人一组拍手。
可是每次都会有1-5位孩子是单独的,因为他左右两边的孩子都分别与他们另一边的孩子合作拍手了。
他们要么跑到圈的另外一边与另外单独的孩子拍手
要么就加入一组,变成3人对拍。
所以我想用Python算一下,出现单独1人、单独2人、单独3人的可能性是多少、
为了方便,我做6位孩子的圆圈。
# Python,如果有6个孩子围成一个圈,在同一时间里,每位孩子可以任意选择与左边或右边的孩子拥抱(只能选一个方向),如果这个孩子向左拥抱,就显示“左”,如果这个孩子向左拥抱,就显示“右”,请问有多少种排列方法,打印出来
def generate_arrangements(n, current, result):
if n == 0:
result.append(current[:])
return
# 选择向左拥抱
current.append('1')
generate_arrangements(n - 1, current, result)
# 回溯
current.pop()
# 选择向右拥抱
current.append('2')
generate_arrangements(n - 1, current, result)
# 回溯
current.pop()
def print_all_arrangements():
# 人数
num_children = 6
result = []
all=[]
generate_arrangements(num_children, [], result)
for arrangement in result:
a=''.join(arrangement)
print(''.join(arrangement))
all.append(a)
print(all)
print(len(all))
print_all_arrangements()
# 2的6次方 =64 种可能的排列方式。
# 2的8次方 =256.
['111111', '111112', '111121', '111122', '111211', '111212', '111221', '111222', '112111', '112112', '112121', '112122', '112211', '112212', '112221', '112222', '121111', '121112', '121121', '121122', '121211', '121212', '121221', '121222', '122111', '122112', '122121', '122122', '122211', '122212', '122221', '122222', '211111', '211112', '211121', '211122', '211211', '211212', '211221', '211222', '212111', '212112', '212121', '212122', '212211', '212212', '212221', '212222', '221111', '221112', '221121', '221122', '221211', '221212', '221221', '221222', '222111', '222112', '222121', '222122', '222211', '222212', '222221', '222222']
64