求算法 分苹果问题输入M N ,M个苹果放到N个篮子里 可以有空篮子 并且122和212算一种放法问一共多少种放法 不需
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 09:35:21
求算法 分苹果问题
输入M N ,M个苹果放到N个篮子里 可以有空篮子 并且122和212算一种放法
问一共多少种放法
不需要代码 只要告诉我算法就可以了 谢谢啦
输入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 =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 (nApple200)
return 0;
if (nBasket30)
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 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 =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 (nApple200)
return 0;
if (nBasket30)
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
三个篮子里共有18个苹果,从第一篮子拿3个苹果放到第二个篮子里,从第二篮子拿4个苹果放到第三个篮子里,此时三个篮子的苹果
把16个苹果放到3个篮子里,有多少种方法
篮子里有一堆水果,苹果占八分之五,梨占八分之三,往篮子里再放6个梨,此时苹果占十一分之五,篮子里现在一共有苹果和梨多少个
一个篮子里有五个苹果,分给五个孩子,篮子里还有多少个苹果?
分苹果的问题妈妈想要把3个苹果放在篮子里给3个女儿,这样每个女孩都有一个完整的苹果,并且它的篮子里还能留下一个,她该怎么
篮子里装有同样数量的苹果和梨.每次取出7个苹果和梨,取了若干次后,梨还剩5个.一共取了几次?篮子里原来有苹果多少个?
三个篮子里共有30个苹果,如果从第一个篮子里取出3个放到第二个篮子里,再从第二个篮子里取出5个放在第三个篮子里,这是三个
把24个苹果全部放进篮子里,要使每个篮子里的苹果数相同,可以放几个篮子?,每个篮子可以放几个?
n个同样的球放入m个不同的盒子里,有多少种方法?(可以有空盒子).分n>m和n
8个相同的苹果放到3个不同篮子里,每个篮子至少放两个,有多少种不同的放法
篮子里有桃和苹果共26个,妈妈拿出3个桃子和5个苹果,篮子里桃子和苹果就一样多了,篮子里原来有多少个...
36个苹果放在篮子里每个篮子多少?(奇数)