【编程题分享·解题思路】周老师现有m个苹果,现要将苹果完全分配给不定人数的小朋友们,每个小朋友的苹果数均不相同。这样的分配可能有多种方式。

这篇博客探讨了一种使用递归算法解决苹果分配问题的方法。周老师有m个苹果,需要将其分配给不确定人数的小朋友,每个小朋友得到的苹果数各不相同。作者通过递归函数实现了找出所有可能的分配方案,并给出了递归公式和终止条件。样例输入为6,输出为4,展示了递归在解决此类问题的效率。文章强调了递归解题时要站在当前递归层面上思考的重要性。
摘要由CSDN通过智能技术生成

【问题描述】周老师现有m个苹果,现要将苹果完全分配给不定人数的小朋友们,每个小朋友的苹果数均不相同。这样的分配可能有多种方式。例如,总数m为6个苹果时,周老师找到了四种不同的分配方式,分别为6=6,6=5+1,6=4+2, 6=3+2+1。请找出当m个苹果时,周老师的苹果分配方式是多少种。

【输入形式】
输入一个正整数 m表示周老师拥有的苹果总数

【输出形式】
输出一个整数,表示周老师的苹果有几种分配方式

【样例输入】
6
【样例输出】
4
解题思路:观察以下数字组合
1,2,3
1,5
2,4
6
它们的共同点在于两两不相同,且加起来等于6.
因此我们可以引入变量,每次要拿走的苹果数从1递增到苹果总数,这样既可以保证数字两两不相同,又可以保证组合只出现一次。
这道题并没有规定苹果要分配给多少人,因此用传统的循环迭代的方式难以进行。用递归可以简单很多。

函数参数:苹果总数和当次拿走的苹果数量。
递归结束条件:苹果总数小于或等于当次拿走的苹果数量。
递归公式:如果这次拿走,下次多拿走一个时剩余苹果数目的分配方案 + 如果这次不拿走,下次多拿走一个时苹果数目的分配方案。
这样可以保证函数返回值为所有分配值都大于或等于拿走苹果数量的方案数。
注意:递归题目的解答一定是站在一个层面的递归内进行思考,不要站在整体思考。那样做没有意义也废脑筋。这道题成功的让我明白了这个观点。

#include<bits/stdc++.h>
using namespace std;
int fenpei(int a,int b)
{
	int c;
	if(a<b)
	{
		c=0;
	}
	else if(a==b)
	{
		c=1;
	}
	else
	{
		c=fenpei(a,b+1)+fenpei(a-b,b+1);
	}
	return c;
}
int main()
{
	int m=0;
	cin>>m;
	cout<<fenpei(m,1);
	return 0;
}

其实这是我讨论课上的内容,我把它放在了博客里,如果这篇文章帮到了你,请点个赞让我知道吧,哈哈。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值