鸡蛋分篮
N个鸡蛋放到M个篮子中,篮子不能为空,要满足:对任意不大于N的数量,能用若干个篮子中鸡蛋的和表示。写出函数,对输入整数N和M,输出所有可能的鸡蛋的放法。
比如对于9个鸡蛋5个篮子
解至少有三组:
1 2 4 1 1
1 2 2 2 2
1 2 3 2 1
思路:
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;
}

浙公网安备 33010602011771号