如何列出C++数组中所有可能的组合和
How to list all the possible sums of combinations in an array for C++?
我有家庭作业,我不知道如何从这类问题的代码开始。
假设我有一个由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)的所有组合和。
好吧,这里有一个简单的规则:
"ABCDE"的所有组合的集合由包含(因此以)"A"的组合和不包含"A"(因此以"A"开头)的组合组成。在这两种情况下,都可能出现"BCDE"的所有组合。当然,"BCDE"的组合也可以用同样的方式处理。
当你说"列出所有可能性的总和"时,你的意思是你想知道实际上有多少组合是可能的吗?
如果是,则搜索一次取K的N个项目的组合;这个网站上有很多页面都在处理这个问题。然后,你只需将(乘以5)+(乘以4)+(除以3)+(乘2)+(加1)的组合数量相加,就可以得到你的总"可能性总和"。
或者你的意思是你有一个值数组,你真的想打印出由不同元素组合表示的不同和?在这种情况下,你需要实际列举所有的组合并计算总和。
因此,给定一个{1,2,3,4,5}的数组,你可以将其编码为"A","B","C","D","E"。元组的例子有:
- ABCDE=1+2+3+4+5
- ABE=1+2+5
- BCE=2+3+5
等等,其中您使用编码枚举来为您的和选择加数。请注意,决定是否允许重复(即"DE"与"ED"不同)将对您的结果产生很大影响;在大多数情况下,这可能不是您想要的。
如果你有3个元素,你可以想象每个元素都放在从1到3(或0到2)的某个位置,还有一个布尔数组,表示元素是否包含在某个集合中。
ABC remark
--- ---------------------
000 no element in the set
001 one element, C
010 one element, b
100 ...
011 two elements, b and c
...
111 all elements contained
现在,如果你计算解的数量,在这种情况下是2³,并生成一个函数,该函数执行从二进制表示到集合的映射,例如从011到(b,c),那么你可以很容易地编程一个循环,该循环从0迭代到max-1,并返回映射函数生成的所有集合。
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 有可能使shared_ptr协变吗
- 有可能在信号处理程序中设置promise吗
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 是否有可能使用debug_info获取ELF文件的源代码?
- 所有可能长度的所有可能组合
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- 有可能在C++中有类的查找表吗
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 向量的大小是否有可能为 1 但其中的元素数量为零?
- 如何计算数组整数的总可能组合
- 如何搜索向单词添加字母的所有可能组合?
- 是否有可能编写新的叮当声现代化规则?
- 是否有可能通过指向另一个未关联的子对象的指针来获取指向一个子对象的指针?
- 是否有可能通过演绎指南实现整个 std::make_tuple 功能?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 是否有可能具有放入容器的移动操作的类型?
- 是否有可能组合对称的代码片段