高端中医私人医生标准:求小于n的所有不重复组合之和等于n

来源:百度文库 编辑:九乡新闻网 时间:2024/05/05 01:37:16

求小于n的所有不重复组合之和等于n

    博客分类:
  • java编程
import java.util.Stack;
import java.util.Vector;

/*
* 该类实现了小于n的数的所有可能组合之和等于n
*/
public class TenTest {


public static void main(String[] args) {
int n = 10;
for(int i = 1;i//用栈来存放数据,方便弹出
Stack ve =  new Stack();
for(int j = i; jve.push(j);
int sum = 0;
for(int m= 0; m < ve.size(); m++){
sum = sum + ve.get(m);
}
if(sum == n){
System.out.println(ve);
ve.pop();
ve.pop();
continue;
}
//添加一个数之后,栈内数据之和大于n时,要考虑的情况
//之和大于等于n,弹出栈顶的两个元素
//还有添加一个数字后之和小于N,但添加下一个数之和大于n,所以弹出两个数,而有一种可能,去掉上一个数据
//加上本次数据,之和可能等于n,例如:234 235
if(sum > n){
ve.pop();
ve.pop();
ve.push(j);
sum = 0;
for(int k= 0; k < ve.size(); k++){
sum = sum + ve.get(k);
}
if(sum == n){
System.out.println(ve);
ve.pop();
}
if(sum > n){
ve.pop();
}
continue;
}

}
}


}
}

结果
[1, 2, 3, 4]
[1, 2, 7]
[1, 9]
[2, 3, 5]
[2, 8]
[3, 7]
[4, 6]