求算法 分苹果问题输入M N ,M个苹果放到N个篮子里 可以有空篮子 并且122和212算一种放法问一共多少种放法 不需要代码 只要告诉我算法就可以了 谢谢啦

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/31 04:38:40
求算法  分苹果问题输入M N  ,M个苹果放到N个篮子里  可以有空篮子  并且122和212算一种放法问一共多少种放法   不需要代码  只要告诉我算法就可以了 谢谢啦

求算法 分苹果问题输入M N ,M个苹果放到N个篮子里 可以有空篮子 并且122和212算一种放法问一共多少种放法 不需要代码 只要告诉我算法就可以了 谢谢啦
求算法 分苹果问题
输入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

求算法 分苹果问题输入M N ,M个苹果放到N个篮子里 可以有空篮子 并且122和212算一种放法问一共多少种放法 不需要代码 只要告诉我算法就可以了 谢谢啦 【问题描述】输入2个正整数m和n(m>=1,n 还有这样一个问题:输入2个正整数m和n(m>=1,n 还有这样一个问题:输入2个正整数m和n(m>=1,n 还有这样一个问题:输入2个正整数m和n(m>=1,n 输入2个正整数m和n,计算m!+n!. C语言:求m!+n!之和【问题描述】输入2 个正整数m 和n,计算m!+n!。【输入形式】从键盘输入正整数m和正整数n.【输入输出样例1】(下划线部分表示输入)Enter m:3Enter n:8+8!=40326【样例说明】 关于求最大公约数算法的问题书上是说:1.输入m、n(m为被除数,n为除数)2.m/n得余数r.3.判断r=0?是的话n为最大公约数.4.否则讲n赋给m,r赋给n,循环2.我想问为什么能这么做?(为什么能用除数除 C语言编程中,求两个数的最大公约数和最小公倍数算法是怎样的输入两个正整数m n求最大公约数和最小公倍数(解释一下算法)谢谢 输入m,n,100 用欧几里得算法(辗转相除法)求最大公约数,C语言编程#include #include int main(){int m,n,a,p,q,r;printf(输入两个正整数);scanf(%d,%d,&m,&n);p=m;q=n;if(m 如何求M个数的第N个全排列?C语言程序设计的算法? 懒得自己查……C语言猴子分苹果问题,内详有1堆苹果共 m 个,由 n 只猴子按个数平均分配.每次到达苹果堆放地的猴子只有1只,而且每个猴子都会平均分 1 次苹果.第1个到达的猴子将苹果平均分 C语言:《求m~n间的所有素数》【问题描述】输入两个正整数m和n(m≥1,n≤500),输出m和n之间的所有素数,每行输出6个。素数是指只能被1和自身整除的正整数,最小的素数是2。【输入输 寻找素数 pascal问题描述:已知 N 和 M 两个正整数,求 N 至 M 之间(包括 N 和 M)有多少个素数.输入:共一行:两个正整数数 N 和 M,中间以一个空格隔开.输出:一个正整数:表示 N 至 M 之间(包 /*2.【问题描述】 输入2 个正整数m 和n(m≥1,n≤500),统计并输出m 和n 之间的素数的个数以及这些素数的/*2.【问题描述】输入2 个正整数m 和n(m≥1,n≤500),统计并输出m 和n 之间的素数的个数以及 vb求m+mm+mmm+...+mm...mmm(n个m)要求 n ,m值 用 inputbox输入Dim m%,n%,i%,j%,a(0 To 9999999) As IntegerPrivate Sub Form_Click()m = InputBox(请输入m值 )n = InputBox(请输入n值 )For i = n To 0 Step -1a(n) = a(n) + 10 ^ (i - 1)Next iPrin C语言:输入m,求n.使n!