【发布时间】:2021-08-09 10:11:06
【问题描述】:
我可以有多少种不同的方式将“n”颗糖果分发给 m = 3 个孩子,这样每个孩子至少得到 1 个糖果,并且至少 1 个孩子应该比其他孩子得到更多的糖果?
例如:糖果数量 = 6,
总方式 = 9
[1,4,1] , [1,1,4] , [4,1,1] , [1,2,3] , [1,3,2] 等等....总方式 = 9 .
我的 Python 代码:
import itertools
n = int(input())
arr = []
for i in range(1,n+1):
for j in range(1, n+1):
for k in range(1,n+1):
if (i+j+k == n) and (i!=j or j!=k):
if sorted(list(set(itertools.permutations([i,j,k],3)))) not in arr:
arr.append(sorted(list(set(itertools.permutations([i,j,k],3)))))
print(arr)
arr1 = [arr[i][j] for i in range(len(arr)) for j in range(len(arr[i]))]
print(arr1)
print(len(arr1))
我自己解决了这个问题,尽管我对高级编程比较陌生,而且我知道我的代码没有经过优化。我想对其进行优化,并使用列表理解在一行中列出不同方式的列表。
我的列表理解有错误:
arr = [sorted(list(set(itertools.permutations([i,j,k],3))) if ((i+j+k == n) and (i!=j or j!=k) and sorted(list(set(itertools.permutations([i,j,k],3))))) not in arr for i in range(1,n+1) for j in range(1, n+1) for k in range(1,n+1)]
任何形式的帮助将不胜感激!
【问题讨论】:
-
请edit您的问题并发布任何错误或追溯的全文。
-
您只想要方式的数量,还是想要所有排列?如果你只需要方法的数量,这真的只是一道数学题。
-
我只想要方式的数量,但我也想知道方式。如果您知道如何计算方法的数量,那也会有所帮助!
标签: python arrays list-comprehension combinations permutation