Small-Chao

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目:M个同样的球放在N个同样的盒子里,不允许有的盒子空着不放,请编写程序计算共有多少种不同的分法?(用k表示) ps:    5,1,1和1,5,1是同一种分法。




我的解法:

#include <stdio.h>

#include <memory.h>

int Sum = 0;

void SonFun(int m, int n,int front, int *pResult,int N)

{

if(n == 1)

{

*(pResult+N-n) = m;

Sum++;

return;

}

int *tmp = new int[N];

int temp = m/n;

for(int i=front; i<=temp; i++)

{

memcpy(tmp,pResult,sizeof(int)*N);

*(pResult+N-n) = i;

SonFun(m-i, n-1, i, pResult,N);

memcpy(pResult,tmp,sizeof(int)*N);

}

}

void MainFun(int m, int n)

{

if(n == 0) return;

int *pResult = new int[n];

int temp = m/n;

for(int i=1; i<=temp; i++)

{

memset(pResult,0,sizeof(int)*n);

*pResult = i;

SonFun(m-i, n-1, i, pResult, n);

}

printf("共有%d种分法\n",Sum);

}

int main(int argc, char** argv)

{

int m = 8;

int n = 3;

MainFun(m,n);

return 1;}

忘牛人批评指正

posted on 2011-10-08 23:22  Small-Chao  阅读(178)  评论(0编辑  收藏  举报