找回密码
 快速注册
搜索
查看: 951|回复: 2

给定几组元素,每组里任取一或两个进行组合

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2017-7-11 08:43 |阅读模式
如题,例如给定
A1={1,2,3,4,5}
A2={a,b,c,d,e}
A3={m,n,o,p,q}
A4={s,t,x,y,z}

每组元素数量都相同(不一定是5个),从每组里任意取零个、一个或两个,然后进行组合,但要求总数必须且只能取5个,比如在A1和A2里都已经各取2个了,则之后或者在A3里取一个,或者在A4里取一个,保证总数是5。用软件怎么能列出来这个呢?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-3-26 17:11
设从A1、A2、A3、A4取的元素个数为x1、x2、x3、x4
  1. def tuples(n):
  2.     tuples = []
  3.     for x1 in range(3):
  4.         for x2 in range(3):
  5.             for x3 in range(3):
  6.                 for x4 in range(3):
  7.                         if x1 + x2 + x3 + x4 == n:
  8.                             tuples.append((x1, x2, x3, x4))
  9.     return tuples
复制代码

此函数生成所有可能的整数4元组 (x1, x2, x3, x4),使得每个 xi ∈ [0, 2],并且它们的和等于 n.
  1. tuples(5)
复制代码
[(0, 1, 2, 2), (0, 2, 1, 2), (0, 2, 2, 1), (1, 0, 2, 2), (1, 1, 1, 2), (1, 1, 2, 1), (1, 2, 0, 2), (1, 2, 1, 1), (1, 2, 2, 0), (2, 0, 1, 2), (2, 0, 2, 1), (2, 1, 0, 2), (2, 1, 1, 1), (2, 1, 2, 0), (2, 2, 0, 1), (2, 2, 1, 0)]
例如(0, 1, 2, 2)对应于从A1取0个,从A2取1个,从A3取2个,从A4取2个.

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-3-26 17:35
  1. IntegerPartitions[5, {4}, Range[0, 2]]
复制代码
{{2, 2, 1, 0}, {2, 1, 1, 1}}
这个整数分拆是无序的, 只有2种.

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:23

Powered by Discuz!

× 快速回复 返回顶部 返回列表