首页 > 编程知识 正文

小学数学题解答(编程分苹果问题)

时间:2023-05-05 16:22:23 阅读:73664 作者:3350

现在有m个苹果,n个盘子,还有空的盘子,分苹果的方法有几种? 这是一个主题。

这个问题的关键是盘子可以是空的也可以不是空的。 因此,每种方法的状态都是有空盘子的情况和没有空盘子的情况,在某种状态下,通过改变每种盘子上的苹果的个数可以改变每种方法,可以得到新的一种方法。 也就是说,通过每次递归从上次的全局状态进行微调整,得到当前的局部状态,在下次递归中

当苹果全部结束,不可能还有其他局部状态的时候,这个时候是一个局部状态,或者现在的局部状态,当盘子被拧成一个,只有一个方案存在的时候,这个时候也结束了。 另外,请注意,每次分开苹果时,都存在决定是否进入空盘状态的两种状态。 它是苹果的数量是否大于盘子的数量,如果大于等于,则有空盘也可以没有空盘,如果小于等于,则一定有空盘,这是构建递归函数的依据。

接下来是代码

# includeiostreamusingnamespacestd; int ans=0; intsolve(intn,int m )/*n是苹果的数量,m是盘子的数量)/(if ) n==0|||m==1) { return 1; (if(nm )/)如果苹果数量少于盘子数量,此时只能得到一种情况)/(返回求解(n,n ); (} else/* )有可用磁盘和无可用磁盘的总和((/returnsolve ) n,m-1 ) solve ) n-m,m ); /*第一个代表有空盘的情况,多一个*//*第二个代表没有空盘的情况。 把剩下的苹果放进去m个,看看发生了什么*/}}int main () int; cint; wile(t---- ) { int n,m; cinnm; ans=solve(n,m ); coutans'n '; }返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。