在这个问题上,我们得到了一个n的集合S。我们的任务是创建一个程序,以查找子集差异之和,即子集的最后一个元素与第一个元素的差异。
公式是
sumSubsetDifference = Σ [last(s) - first(s)] s are subsets of the set S.
让我们举个例子来了解这个问题,
输入 -
S = {1, 2, 9} n = 3
输出-
说明-所有子集是-
{1}, last(s) - first(s) = 0 {2}, last(s) - first(s) = 0 {9}, last(s) - first(s) = 0 {1, 2}, last(s) - first(s) = 1 {1, 9}, last(s) - first(s) = 8 {2, 9}, last(s) - first(s) = 7 {1, 2, 9}, last(s) - first(s) = 8 Sum = 1 + 8 + 7 + 8 = 24
解决该问题的简单方法是找到所有子集的last和first之间的差异,然后将它们相加以获得总和输出。这不是最有效的解决方案,因此让我们讨论一个更有效的解决方案。
对于n个元素的集合S,也可以使用从数组的元素开始的所有子集的数量来计算总和。然后求和以求结果。
所以,
sumSetDifference(S) = Σ [last(s) - Σfirst(s)]
因此,对于具有元素{s1,s2,s3,…sn}的集合S。
可以使用元素与{s2,s3,…sn}的组合来构成以s1开头的子集。这将给出2 n-1套。
同样,对于以s2开头的子集,给出2个n-2集。
概括起来,子集以Si开头,给出2 n-i。
因此,所有子集的第一个元素的总和为-
SumFirst = a1.2n-1 + a2.2n-2 + a3.2n-3 + … + an.2n-n
同样,我们将计算固定最后一个元素的sumLast。
SumLast = a1.2n-n + a1.2n - (n-1) + a3.2n - (n-2) + ... + an.2n - (n-(n-1))
用于说明上述解决方案的程序,
#include<iostream> #include<math.h> using namespace std; int CalcSumFirst(int S[], int n) { int sum = 0; for (int i = 0; i < n; i++) sum = sum + (S[i] * pow(2, n-i-1)); return sum; } int CalcSumLast(int S[], int n) { int sum = 0; for (int i = 0; i < n; i++) sum = sum + (S[i] * pow(2, i)); return sum; } int main() { int S[] = {1, 4, 9, 6}; int n = 4; int sumSetDiff = CalcSumLast(S, n) - CalcSumFirst(S, n); printf("The sum of subset differences is %d", sumSetDiff); return 0; }
输出结果
The sum of subset differences is 45
问题内容: 编译并在C中运行此代码 输出: 现在对于Java中的相同逻辑 输出: 为什么两种语言的输出都不同,输出是可以理解的,但我无法理解 还有一件事,如果应用前缀运算符,那么两种语言的结果相同,为什么呢? 问题答案: 这是因为在C.看看所调用未定义行为这 从链接: 第二句说:如果将对象写入完整表达式中,则在同一表达式中对对象的任何和所有访问都必须直接参与要写入的值的计算。该规则有效地将法律表达
本文向大家介绍C++与C的差异分析,包括了C++与C的差异分析的使用技巧和注意事项,需要的朋友参考一下 虽说C++是向后兼容C的,但C++与C还是存在许多差异。本文列举了几个例子加以说明,同时这些也是我们非常容易忽略的地方。本文仅简单的列举几例,更多的不同之处读者还需要在学习与实践中不断的进行发掘和总结。 C编译通过但C++编译不通过: 1、C++中编译器不允许在一个函数声明之前调用它,但C中编译
我最近开始学习C,我在理解指针语法时遇到了问题,例如当我写以下行时: 我怎样才能知道: > arr是指向整数指针数组的指针 arr是指向整数数组指针数组的指针 不都是一样的吗? 如果我有一个接收作为参数的函数,我想将其称为指向字符串数组的,这意味着指向指向数组的指针数组的指针,但它也是指向指针的指针吗?
问题内容: 我正在尝试编写一个函数,该函数不仅将确定集合的子集的总和是否会增加到所需的目标数量,而且还将打印解决方案的子集。 这是我的代码,用于查找是否存在子集: 如何修改它以记录子集本身,以便可以打印它?提前致谢! 问题答案: 根据您的解决方案:
问题内容: 我进行了很多搜索以找出这个问题,但是我没有得到明确的解释。集群应用程序可以扩展而分叉应用程序不能扩展只是一件事? PM2的公共站点解释说集群模式可以实现这些功能,但是没有人说出Fork模式的优点(也许可以变)。 我觉得Cluster可能是Fork的一部分,因为Fork似乎被广泛使用。因此,我猜想Fork从PM2的角度讲只是“分叉的过程”,而Cluster则是“能够扩展的分叉的过程”。然
我想从的中创建一个并在映射中使用相同的parentId映射列表中的所有条目,如。 我使用了但它不编译: