题目:输入m和n(20>=m>=n>0),请编程求出满足以下方程的正整数数列i1,i2,....,in, 使得:i1+i2+....+in=m,且i1>=i2>=....>=in. /*****************************************/ /* 整数划分问题 */ /* 程序员:刘晋勋 */ /* 日期:2010/03/30 */ /*****************************************/ /*算法思想:将最大数不超过m的整数划分个数记为Q(n,m); 1. Q(n,1) = 1;(n>=1) 2. Q(n,m) = Q(n,n);(m>=n) 3. Q(n,n) = 1 + Q(n,n-1); 4. Q(n,m) = Q(n,m-1) + Q(n-m,m); n>m>1 */ #include<stdio.h> int split_num(int n,int m) { if(n < 1 || m < 1) { return 0; } if(n == 1 || m == 1) { return 1;//6=1+1+1+1+1+1或者1=1 } if(n < m) { return split_num(n,n); } if(n == m) { return 1+split_num(n,n-1); } else return split_num(n,m-1)+split_num(n-m,m); } void main() { int res1 = split_num(5,5); int res2 = split_num(6,6); printf("%d/n%d",res1,res2); }