我们如何找到数组

时间:2017-09-02 15:16:00

标签: java

我试图在java中找到以下代码中每个的总和。我应该在这段代码中做出哪些更改。

import java.io.IOException;

class as {

    static void printSubsets(int set[]) {
        int n = set.length;
        for (int i = 0; i < (1 << n); i++) {
            for (int j = 0; j < n; j++) {
                if ((i & (1 << j)) > 0) {
                    System.out.print(set[j] + " ");
                }
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int set[] = { 1, 2, 3 };
        printSubsets(set);
    }
}

上述代码的输出是:

1 
2     
1 2     
3     
1 3     
2 3     
1 2 3 

我希望将子集的每个元素乘以其最后一个数字,例如

1*1=1    
2*2=4    
1*2+2*2=6    
3*3=9

likewise all elements 

最后生成所有这些子集1+4+6+9+..的总和,依此类推。

上面的代码也打印空集和子集是有序的。如何编辑这个程序进行更改,使其不打印空集和打印随机子字符串。

1 个答案:

答案 0 :(得分:1)

据我所知,你想要将所有元素相互叠加,并用结果打印出迭代的每一步。你在这里:

static void printSubsets(int set[]) {
    int sum = 0;
    for (int i=0; i<set.length; i++) {
        for (int j=i; j<set.length; j++) {
            int var = set[i] * set[j];
            sum += var;
            System.out.println("( " + set[i] + " * " + set[j] + " = " + var + " ) -> sum=" + sum);
        }
    }
    System.out.println("final sum=" + sum);
}

在输入[1,2,3]的情况下,总和应该根据我的算法增长:

  

1,3,6,10,16至20

关于<<移位运算符的注释,它将位模式向左移位。假设数字2在二进制中被理解为10。将此数字移至2 << 4将导致二进制100000,以十进制形式理解为32。我不确定你真的需要这种模式。