中易网

求算法 分苹果问题

答案:3  悬赏:10  
解决时间 2021-02-17 21:11
输入M N ,M个苹果放到N个篮子里 可以有空篮子 并且122和212算一种放法

问一共多少种放法

不需要代码 只要告诉我算法就可以了 谢谢啦
最佳答案
算法说明太复杂,后面给你代码。简单说明:
122 212 221是同种方法,则取代表 221
123 。。。321 是同种方法,则取代表 321
能当“代表”的组合的特点是,前面的不小于后面的。
这是一个限制条件。

想来想去用递归最好。
比如10个放入3个篮子,变成:
第一个放10,再把0个放入剩余2个篮子
第一个放9,再把1个放入剩余2个篮子
第一个放8,再把2个放入剩余2个篮子
第一个放7,再把3个放入剩余2个篮子
。。。。

总之,M个苹果,N个篮子,
第一个放a个,a的范围是从M减小到0,
而再将(M-a)个苹果放入N-1个篮子。

但是放的时候要一定满足“前面的不小于后面的”。
代码:

#include

void PutApple(long nRemainApple, long nRemainBasket,
long nLevel, long nAllLevel, long * npBuffer,
long nLimit, long * npSum)
{
long k;
if (nLevel == nAllLevel-1)
{
if (nRemainApple <= nLimit)
{
// Find a solution !
// print result.
npBuffer[nLevel] = nRemainApple;
for (k=0; k printf("%4d ", npBuffer[k]);
printf("\n");
(*npSum) ++;
}
return;
}

long nStart = nRemainApple;
if (nStart>nLimit) nStart = nLimit;
for (k=nStart; k>=0; k--)
{
npBuffer[nLevel]=k;
PutApple(nRemainApple-k, nRemainBasket-1,
nLevel+1, nAllLevel, npBuffer, k, npSum);
}
}

main()
{
int nApple = 10;
int nBasket = 3;
printf("Please input apple count:");
scanf("%d", &nApple);
printf("Please input basket count:");
scanf("%d", &nBasket);

if (nApple<=0 || nApple>200)
return 0;
if (nBasket<=0 || nBasket>30)
return 0;

long * npBuffer = new long [nBasket];
long nCount=0;
PutApple(nApple, nBasket, 0,
nBasket, npBuffer, nApple, &nCount);
delete []npBuffer;

printf("Count = %d\n", nCount);
return 0;
}

对10个苹果,3个篮子,运行结果:
Please input apple count:10
Please input basket count:3
10 0 0
9 1 0
8 2 0
8 1 1
7 3 0
7 2 1
6 4 0
6 3 1
6 2 2
5 5 0
5 4 1
5 3 2
4 4 2
4 3 3
Count = 14
Press any key to continue
全部回答
你是说怎么排除122和212的情况是吧 N个篮子中苹果的总数若一样多:先将篮子里苹果按数目排序,后一个一个比较,若N个篮子的数都一样就说明是 122和212的情况,可以排除一个
这种东西要算法么? 如果只是这样分苹果,只是一个简单的组合问题 答案就是m的n次方再除以m的阶乘与n的阶乘(这是因为这题不要区分个异性)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大唐醉仙鸭地址在哪,我要去那里办事
结合上述材料,简要说明科学发展观是怎样体现
农历2009年10月23日一点25分出生的女孩,她爷
得胜村在哪里啊,我有事要去这个地方
馒头店叫什么名字好
出轨后怎样不被人发现
expensive的反义词
电信卡流量怎么查?
杏林大药房西门店地址在哪,我要去那里办事
新华人寿公司的健康无忧c款中的60种重症是哪
狗狗衣服四脚的好还是两脚的好
办一般中国银行卡开什么账户
求一个java+oracle的学生考勤系统程序源代码
叶财五金装饰我想知道这个在什么地方
求张反叛的鲁路修中鲁路的机甲的图片
推荐资讯
名人在哪里啊,我有事要去这个地方
梦见前夫杀我
coreldraw中如何选中两个矩形
主页 日志 留言板 相册 个人档 音乐盒翻译成
方便面桶所使用的包装材料是什么
58万的房子首付3成是多少
您好我想问一下,听朋友说持有新三板原始股的
谁知道株洲联诚集团是国营企业还是私营企业?
建行信用卡在柜台已经查到同意额度一万但微信
电脑显示器监视器屏幕分辨率调多少正常?
请问我租房子牵了网了。搬家时网线可以搬么?
从下沙到海宁许村康顺中西医结合门诊部公交可
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?