如何在不重复的情况下找到所有可能子集中元素乘法的总和?

时间:2018-04-25 19:54:08

标签: math sum multiplication

我在竞赛中遇到过这个问题,我试图用这个代码回答它(在Java中,你可以使用任何支持的语言,在底部链接的竞赛网站):

static long calcMultisSums(int[] arr)
{
    int sum=0, n=arr.length;
    for(int i=0;i<n;i++)
        sum+=arr[i];

    int mult=0;

   for(int i=0;i<n;i++){
       for(int b=i+1;b<n;b++)
           mult+=arr[b]*arr[i];
   }
   int mult2=0;
    if(n>2){
        mult2=1;
        for(int value : arr) {
            mult2 *= value;
        }      
    }


    return mult+sum+mult2;
}

它适用于包含少于4个元素的数组,但每当它得到4个或更多元素时,它最终给出错误的答案,这显然是因为它计算所有元素的乘法,所有元素的总和,然后将每个元素相乘如果arr中的元素数量> 3.这显然是解决问题的一个不好的解决方案,我确信应该有更好的解决方案。

Here is the contest in question您可以在这里阅读问题并测试答案。 (问题6,求和挑战)

1 个答案:

答案 0 :(得分:0)

天真的方法:

  1. 制作一个静态变量sum = 0 找到数组的所有子集(在您的示例中,它被称为powerset):How to find all the subsets of an array in java?
  2. 计算每套产品
  3. 将其添加到sum
  4. 更好的解决方案在这里: Sum of product of all possible subsets of array