JAVA算法用于打印3个元素子集的函数?

时间:2014-06-15 10:37:07

标签: java arrays algorithm printing

我有一个问题,我正在编写一个算法。我给第一行是int Print-3-element-subsets(int n,int s [])。我的算法似乎不正确。请帮我。

编写一个函数,打印出数组S中元素的所有3元素子集(索引从1到n)。不要打印相同的子集两次,并确保每个子集恰好有3个元素。

int Print-3-element-subset(int n, int s[])
{
    for(int i =0; i<n; i++)

         for(int j=n; j<i; j--)

            for(int k =n ; k<i; j--)

                print("{"+s[i]+ ", "+s[j]+"," +s[k]+"}");
} 

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

void print3elementSubsets(int[] s) {
    int n = s.length;
    for(int i = 0; i < n-2; i++) {
        for(int j = i+1; j < n-1; j++) {
            for(int k = j+1 ; k < n; k++) {
                print("{"+s[i]+ ", "+s[j]+"," +s[k]+"}");
            }
        }
    } 
} 

如果您遇到这样的问题,请先使用纸和铅笔以使索引正确。绘制数组,考虑i应该从哪里开始和结束等。不要直接进入编程并尝试“调整”代码,直到它适合。

答案 1 :(得分:0)

这样的东西也适用于小子集

void printThreeElementSubsets(int[] s) {
    int n = s.length;
    for (int mask = 0; mask < (1 << n); ++mask) {
        if (Integer.bitCount(mask) == THREE) {
            for (int i = 0; i < n; ++i) {
                if ((mask & (i << 1)) != 0)
                    System.out.print(s[i] + " ");
            }
            System.out.println();
        }
    }
}

它保证子集只打印一次。