日期:2014-05-20 浏览次数:20736 次
public class TwoArrAssemble { static void combination(int[][] array, int alength, int blength, int sub) { if (sub >= array[0].length) { int a = 0, b = 0; for (int j = 0; j < array[0].length; ++j) { if (j < alength) a += array[1][j]; else b += array[1][j]; } if (a != 0 && b != 0) { for (int j = 0; j < array[0].length; ++j) if (array[1][j] == 1) System.out.print(array[0][j] + " "); System.out.println(); } return; } array[1][sub++] = 1; combination(array, alength, blength, sub); array[1][sub - 1] = 0; combination(array, alength, blength, sub); } public static void main(String[] args) { int[] a = { 1, 3}; int[] b = { -2, -4}; int[][] array = new int[2][a.length + b.length]; for (int i = 0; i < array[0].length; ++i) { if (i < a.length) array[0][i] = a[i]; else array[0][i] = b[i - a.length]; array[1][i] = 1; } combination(array, a.length, b.length, 0); } } 1 3 -2 -4 1 3 -2 1 3 -4 1 -2 -4 1 -2 1 -4 3 -2 -4 3 -2 3 -4
------解决方案--------------------
以从一个数组里所有组合的代码修改一下
import java.util.Vector;
//在N个数组里分别在每个数组里选出至少一个元素组成新的数组
public class SelectNumbers
{
//在source数组里从startIndex之后(含startIndex)开始选出cout个不同的数字。结果添加进vresult向量
public void selectInArray(int [] source, Vector<String> vresult, String result, int startIndex, int cout)
{
if (cout == 1)
{
String s1 = result + "," + source[startIndex];
vresult.add(s1.substring(1));
return;
}
for (int i=startIndex+1; i<source.length; i++)
selectInArray(source, vresult, result + "," + source[startIndex], i, cout-1);
}
public void display(Vector<String> vs1, Vector<String> vs2)
{
for (int i=0; i<vs1.size(); i++)
for (int j=0; j<vs2.size(); j++)
System.out.println("(" + vs1.get(i) + ")(" + vs2.get(j) + ")");
}
public static void main(String [] args)
{
SelectNumbers demo = new SelectNumbers();
int [][] arrSource = {{1, 3}, {-2, -4}};//arrSource一维长度就是代表数组个数N
Vector<String>[] arrvs = new Vector[arrSource.length];
for (int i=0 ; i<arrSource.length; i++)
{
arrvs[i] = new Vector<String>();
for (int startIndex=0; startIndex< arrSource[i].length; startIndex++)
for (int cout=1; cout<=arrSource[i].length-startIndex; cout++)
{
String result = "";
demo.selectInArray(arrSource[i], arrvs[i], result, startIndex, cout);
}
}
demo.display(arrvs[0], arrvs[1]);
}
}