欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mathematica函数子集和元组的使用

程序员文章站 2022-04-01 07:58:38
...

我们从下面这个问题来了解这两个函数。

问题

现有两个 1Kg 的快件,一个 2Kg 的快件,三个 3Kg 的快件,三个 4Kg 的快件和一个 5Kg 的快件,用两个承受 15Kg 的布袋装完所有快件有多少种可能?

用到的函数

DeleteDuplicates:删除重复的元素
Subsets:获得子集
Tuples:获得所有的组合

关于SubsetsTuples这两个函数我们可以看一下下面这张图片,来看一下两者的区别

mathematica函数子集和元组的使用

解答

首先我们先计算出每个袋子中应该如何装快件,使得正好放满 15Kg。

weight = {1, 1, 2, 3, 3, 3, 4, 4, 4, 5};
way = Select[DeleteDuplicates[Subsets[weight]], Total[#] == 15 &]

mathematica函数子集和元组的使用

接着计算两个袋子的装法,使得两个袋子正好装掉上面所有的快件

res = Select[{#1, #2, Join[#1, #2]} & @@@ Tuples[way, 2], 
  Sort[#[[3]]] == weight &];
DeleteDuplicates[Sort[{#1, #2}] & @@@ res[[All, {1, 2}]]] // Column  

mathematica函数子集和元组的使用

完整解答

mathematica函数子集和元组的使用

以上,所有

2017 / 07 / 31