62,614
社区成员
发帖
与我相关
我的任务
分享
public void go(){
String res="";
addTo(1,res,100);
}
public void addTo(int base,String res,int leftValue){
if(leftValue==0){
System.out.println(res);
return;
}
for(int i=base;i<leftValue;i++){
addTo(i+1,res+"+"+(i+1),leftValue-i-1);
}
}
/*
* 100可分解为1+99,99又可继续分解。
* 因为用的是1和99分解。所以分解99从1+1开始。2+?
*/
public class Main {
public static void main(String[] args) {
new Main().start(10);
}
private void start(int a) {
n = a;
iarr = new int[(int) Math.sqrt(n * 2)];
for (int i = 1; i < n; i++) {
iarr[0] = i;
k = 1;
sum = i;
g();
}
System.out.println("_________________" + s);
}
public void g() {
if (n - sum <= 0) {
System.out.print(iarr[0]);
for (int i = 1; i < k; i++) {
System.out.print("+" + iarr[i]);
}
System.out.println();
s++;
return;
}
for (int i = iarr[k - 1] + 1; i <= n - sum; i++) {
iarr[k++] = i;
sum += i;
g();
sum -= i;
k--;
}
}
private int n;
private int k;
private int sum;
private int s;
private int[] iarr;
}
public static void main(String[] args) {
split(100,0,"");
}
public static void split(int n,int base,String result){
if(n==0){
System.out.println(result);
return;
}
for(int i=base+1;i<=n;i++){
split(n-i,i,result+i+"|");
}
}