我在竞赛中遇到过这个问题,我试图用这个代码回答它(在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,求和挑战)
答案 0 :(得分:0)
天真的方法:
sum = 0
找到数组的所有子集(在您的示例中,它被称为powerset):How to find all the subsets of an array in java? sum
更好的解决方案在这里: Sum of product of all possible subsets of array