排列组合——分组

wils
wils

创作者俱乐部成员

再来一个"简单"的问题:12个人,每4人一组,分成3组,列出所有不重复的分组。。。

高中数学痛击我.jpg

"显然"😂共有,C(12,4)*C(8,4)/P(3,3)=5775组不重复的分组

论坛里曾经分享过,https://bbs.wps.cn/topic/15559,JS宏里可用的排列组合库,但要写出通用性强一点的方法还是比较困难。。。

那不如再介绍一个加载项,xloil,如果你用过excel里的xlwings,那么xloil就是wps可用的、更快速、扩展性更好的xlwings,装上它,不仅可以像上一个帖子里那样方便的在公式栏写SQL,更可以简单写一个py脚本,里面的方法就会变成wps里可用的公式

👋

import xloil as xlo

from itertools import combinations

def rec(arr, n):

if len(arr) <= n:

return [[','.join(arr)]]

ret = []

for i in combinations(arr, n):

if i[0] == arr[0]:

for j in rec([k for k in arr if k not in i], n):

ret.append([','.join(i)] + j)

return ret

@xlo.func

def fz(x, y):

return rec([str(i) for i in range(1, int(x) + 1)], int(y))

感谢python里的itertools库,提供了方便快速的排列组合方法,让我不用递归里面嵌套递归。。。

其实,回顾写过的帖子,总的思路就是——偷懒,哈哈,怎么简单怎么写,能偷懒就偷懒😁

用py的好处也是这样,ai回答的py代码正确率最高,毕竟人气最高

海南省
浏览 671
2
4
分享
4 +1
2
2 +1
全部评论 2
 
马成功老师
马成功老师

创作者俱乐部成员

赞赞赞
· 北京
回复
 
李强
打卡!
· 山西省
回复