java新手求教,求大家帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/27 07:20:38
一个正整数分成若干个不同正整数的和,例如,8=1+2+5,8=3+5,8=2+6,8=1+7,怎么编程啊,求高手指点

排列从左到右递减,如
8=7+1
8=6+2
8=5+3
8=5+2+1
8=4+3+1
则第一个数可用for(int i=8;i>0;i--)循环
第二个数比第一个小,则for(int j=i-1;j>0;j--)
两句嵌套得
for(int i=8;i>0;i--){
for(int j=i-1;j>0;j--){
if(i+j==8){
……………………
}
}
}
这样子可以算出两个数相加
如果要加多几个数,可在for(int j=i-1;j>0;j--)中加判断
如果i+j小于8,即这时结果可能是8=5+2+1之类的大于两个数相加,把8-i(用8=5+2+1当作例子吧,8-i就是3,因为i等于5了)再分成若干个不同正整数的和,但有个条件,再分出的第一个数不能大于i,不然结果中就有重复的了,这样不断分,最后统一打印出来就行了。
可能有更好的方法。。。。。。
public class T{
static void count(int num,int max,String str){
for(int i=max;i>0;i--){
for(int j=i-1;j>0;j--){
if(num-i-j==0){
System.out.println(str+i+"+"+j);
}
if(num-i-j>0){
count(num-i,j,str+i+"+");
break;
}
}
}
}
public static void main(String[] args){
count(8,8,"8=");
}
}