java将一个给定的整数转换成一个由小于该数的所有正整数组成的数组,从中取指定个数的元素相加使之和是被
将一个给定的整数转换成一个由小于该数的所有正整数组成的数组,从中取指定个数的元素相加使之和是被拆的数,有多少种组合,有会这个算法的没?比如说,10,分成1,2,3,4,5...
将一个给定的整数转换成一个由小于该数的所有正整数组成的数组,从中取指定个数的元素相加使之和是被拆的数,有多少种组合,有会这个算法的没?
比如说,10,分成 1,2,3,4,5,。。。。9
然后1,4,5组合等于10 展开
比如说,10,分成 1,2,3,4,5,。。。。9
然后1,4,5组合等于10 展开
2个回答
展开全部
public static int getTheNumberOfPossibilities_ladder(int n,int num){
return getTheNumberOfPossibilities_noFloor(n,num-(n+1)*n/2);
}
public static int getTheNumberOfPossibilities_noFloor(int n,int num){
int sum = 0;
int n_next_max = 0;
if( n == 1 || num ==1 ){
return 1;
}else if( n >= num ){
n_next_max = num;
}else{
n_next_max = n;
}
for(int i = 1 ; i <= n_next_max ; i++){
sum += getTheNumberOfPossibilities_smoothFloor(i,num);
}
return sum;
}
public static int getTheNumberOfPossibilities_smoothFloor(int n,int num){
if(n>num){
return 0;
}else if(n==num){
return 1;
}else{
return getTheNumberOfPossibilities_noFloor(n,num-n);
}
}
调第一个方法就行了,n是指定个数,num是指定整数,返回组合的数量,目前还不能把所有组合打印出来,先这样吧,有机会再改。(注意,不考虑非法输入和元素可重复的情况)
return getTheNumberOfPossibilities_noFloor(n,num-(n+1)*n/2);
}
public static int getTheNumberOfPossibilities_noFloor(int n,int num){
int sum = 0;
int n_next_max = 0;
if( n == 1 || num ==1 ){
return 1;
}else if( n >= num ){
n_next_max = num;
}else{
n_next_max = n;
}
for(int i = 1 ; i <= n_next_max ; i++){
sum += getTheNumberOfPossibilities_smoothFloor(i,num);
}
return sum;
}
public static int getTheNumberOfPossibilities_smoothFloor(int n,int num){
if(n>num){
return 0;
}else if(n==num){
return 1;
}else{
return getTheNumberOfPossibilities_noFloor(n,num-n);
}
}
调第一个方法就行了,n是指定个数,num是指定整数,返回组合的数量,目前还不能把所有组合打印出来,先这样吧,有机会再改。(注意,不考虑非法输入和元素可重复的情况)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询