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;}
原文链接: https://www.cnblogs.com/fora/archive/2011/04/05/2005607.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/23409
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!