如果是求多少种的话(不用列出所有的东西)应该可以用递归吧: func(100)=func(1)*func(99)+func(2)*func(98)+...+func(99)*func(1)code: public static int func(int add){ if(add ==1) return 1; int sum = 0; for(int i=1;i<=add/2;i++){ sum += func(i)*func(add-i); } return sum; } //上述代码会有重复,原因已表 且当 抛砖引玉~
//所加的数没有重复的情况 public class OneHundred_AddPossibility { static long count = 0 ; public static void main(String[] args){ decompose(100,0) ; System.out.println(count) ; }
public static void decompose(int number,int flag){ //System.out.println(flag + " " + number); flag ++ ; int num ; int maxflag = number/2 ; if(number%2!=0){ maxflag += 1; } for(int i = flag ; i < maxflag ; i++){ num = number - i ; count++ ; if(num > i){ decompose(num,i) ; }
func(100)=func(1)*func(99)+func(2)*func(98)+...+func(99)*func(1)但是,这样的话1+99和99+1是算两种的
如果要求是算一种的话,暂时没什么想法
笨拙的方法-〉把求出来的结果排序后放入一个map。(此时传参需要将既得的加数传进来/返回),最后通过map的大小确定最终结果
1+1+.....+1=100; //共100项
2+1+.....+1=100; //少掉一项
3+1+.....+1=100; //少掉两项
.
.
.
99+1=100. //少掉98项
那么变量就是相加项数逐渐减少。
我JAVA是初学者,这样代码有点写不出来。望高手帮个忙。小弟先谢了。
func(100)=func(1)*func(99)+func(2)*func(98)+...+func(99)*func(1)code:
public static int func(int add){
if(add ==1)
return 1;
int sum = 0;
for(int i=1;i<=add/2;i++){
sum += func(i)*func(add-i);
}
return sum;
}
//上述代码会有重复,原因已表
且当 抛砖引玉~
public class OneHundred_AddPossibility {
static long count = 0 ;
public static void main(String[] args){
decompose(100,0) ;
System.out.println(count) ;
}
public static void decompose(int number,int flag){
//System.out.println(flag + " " + number);
flag ++ ;
int num ;
int maxflag = number/2 ;
if(number%2!=0){
maxflag += 1;
}
for(int i = flag ; i < maxflag ; i++){
num = number - i ;
count++ ;
if(num > i){
decompose(num,i) ;
}
}
}
}