鸡蛋分篮

N个鸡蛋放到M个篮子中,篮子不能为空,要满足:对任意不大于N的数量,能用若干个篮子中鸡蛋的和表示。写出函数,对输入整数N和M,输出所有可能的鸡蛋的放法。

比如对于9个鸡蛋5个篮子
解至少有三组:
1 2 4 1 1
1 2 2 2 2
1 2 3 2 1

思路:

C/C++ code
int F( int p[], int n, int m ) { if( n < m ) return 0; if( m == 1 ) return !( 1 - n ); int sum = 0; for( int i = ( n - 1 ) / ( m - 1 ); i <= ( n + 1 ) / 2; i++ ) { if( i > p[m] ) break; p[m - 1] = i; sum += F( p, n - i, m - 1 ); } return sum; }
int main()
{
 
int N, M; cin >> N >> M;
 
int P[64] = {0};
  P[
0] = 1;
  P[M]
= N;
  cout
<< "Count: " << F( P, N, M ) << endl;
 
return 0;
}
posted @ 2011-04-05 10:06  ForA  阅读(604)  评论(0)    收藏  举报