日期:2014-05-20 浏览次数:20815 次
public class Test {
private static int max=19;
private static int sum=20;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<max-1;i++){
getStr("",0,i);
}
}
public static void getStr(String str,int tempSum,int i){
if(i>max){
return;
}
//如果前面的值加上当前的值等于要求的值,就输出
if(tempSum+i==sum){
System.out.println(str+"+"+i+"="+sum);
}else if(tempSum+i>sum){
return;
}else{
//如果是值小于要求的值,就加上了当前的值,然后继续对下一个数进行判断
for(int j=i+1;j<max;j++){
if("".equals(str)){
getStr(str+i,tempSum+i,j+1);
}else{
getStr(str+"+"+i,tempSum+i,j+1);
}
}
}
}
}
import java.util.Arrays;
public class SumTest {
/*
* 假定结果集合为一个从小到大排列的数组,初始化为一个元素,将元素拆分,最终形成若干个数组,使每个数组的和等于原数组的值
*/
public static void sum(int min, int[] result) {
int sum = result[result.length - 1];
for (int i = min; i <= sum - i; i++) {
if (sum - i >= i) {
int[] temp = new int[result.length + 1];
System.arraycopy(result, 0, temp, 0, result.length - 1);
temp[result.length - 1] = i;
temp[result.length] = sum - i;
System.out.println(Arrays.toString(temp));
sum(i, temp);
}
}
}
public static void main(String args[]) {
SumTest.sum(1, new int[] { 20 });
}
}