功能:
* 输入m和n(20≥m≥n≥1)求出满足以下方程式的正整数数列i1,i2,…,in,使得:i1+i2+…+in=m,且i1≥i2≥……≥in。
* 原型: 当n=4,m=8时,将得到如下5个数列: 5 1 1 1 , 4 2 1 1 , 3 3 1 1 , 3 2 2 1 , 2 2 2 2
* int GetSeriesNum(int m, int n); 输入参数: int m:20≥m≥n≥1 int n:20≥m≥n≥1 返回值:
* 满足i1+i2+…+in=m,且i1≥i2≥……≥in条件的数列的数量
package com.caoliang.test;
import java.util.Arrays;
public class Test {
int count = 0;
int[] k = new int[20];
public int getNumbles(int m, int n) {
int i, j, d = 0;
if ((m >= n) && (n > 0) && (m <= 20)) {
if (n == 1) {
System.out.println("m="+m);
k[0] = m;
System.out.println("========"+Arrays.toString(k));
d = 0;
for (j = 0; k[j]!=0; j++) {
if (k[j + 1] > k[j]) {
d = 1;
}
}
if (d == 0) {
count++;
}
} else{
//每组数的最后一位数字肯定是小于等于m/n的,
for (i = 1; i <= m / n; i++) {
//给数组的最后一位赋值
k[n - 1] = i;
//由于递归,n-1的值在不停的减1,所以这个式子的结果是n=1开始计算
getNumbles(m - i, n - 1);
}
}
}else{
return 0;
}
return count;
}
public static void main(String[] args) {
Test test = new Test();
int res1 = test.getNumbles(8, 4);
// int res2 = test.getNumbles(6, 6);
System.out.println("res1=" + res1);
}
}