我有我的家庭作业,我不知道如何开始与代码的这类问题。
假设我有一个包含n个元素的整数数组,
[A][B][C][D][E](例如我们有5个元素)
我想列出所有可能性的总和,这样我想打印出所有组合的总和(ABCDE,ABCD,ABCE,ACDE,BCDE,ABC,ABD,ABE,ACE,ADE,BDE,CDE,AB,AC,AD,AE,BC,BD,BE,CD,CE,DE,A,B,C,D和E)
另一个示例是数组中有4个元素([A][B][C][D])
我想列出所有总和的组合(ABCD,ABC,ABD,ACD,BCD,AB,AC,AD,BC,BD,CD,A,B,C,D)。
3条答案
按热度按时间qyswt5oh1#
好吧,这里有一个简单的规则要遵循:
“ABCDE”的所有组合的集合由包含(因此以)“A”的那些组合和不包含“A”的那些组合组成。在这两种情况下,“BCDE”的所有组合都可以出现。当然,“BCDE”的组合可以以同样的方式处理。
yws3nbqq2#
当你说“列出所有可能性的总和”时,你的意思是你想知道有多少组合是实际可能的?
如果是,则在每次取K的N个项目的组合上搜索;在这个网站上有专门的网页来解决这个问题。2你可以简单地把(乘以5)+(乘以4)+(乘以3)+(乘以2)+(乘以1)的组合数相加,得到你的“可能性总和”。
或者你的意思是你有一个值的数组,你真的想打印出不同元素组合所代表的不同总和吗?在这种情况下,你需要实际枚举所有的组合并计算总和。
因此,给定一个数组{ 1,2,3,4,5 },您可以将其编码为“A”,“B”,“C”,“D”,“E”。元组的示例如下:
注意,决定是否允许重复(即“DE”与“ED”是否不同)将对结果有很大影响;在大多数情况下,这可能不是您想要的。
oyjwcjzk3#
如果你有3个元素,你可以想象每一个元素都放在1到3(或0到2)之间的某个位置,一个布尔数组表示该元素是否包含在某个集合中。
现在,如果你计算出解的个数,在这个例子中是2³,然后生成一个函数,这个函数将一个二进制表示Map到一个集合,例如,从011到(b,c),那么你就可以很容易地编写一个循环,这个循环从0迭代到max-1,并返回由Map函数产生的所有集合。