数据结构和算法:给空盘分苹果

博客围绕把m个同样苹果放在n个同样盘子里,允许盘子空着的分法数量问题展开。分析出允许有空盘事件包含存在空盘和不存在空盘两个互斥事件,将问题转化后采用递归方法求解,还给出了C++编程实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内卷之源:

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf?tpId=37&&tqId=21284&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking

题目描述:

 * 把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放(本题潜藏意思是盘子可以空,但苹果必须放完),问共有多少种不同的分法?(用K表示)
 * 5,1,1和1,5,1是同一种分法。———— 即苹果、盘子均没有编号,不讲顺序,分完即可
 * 数据范围:0<=m<=10,1<=n<=10。

测试用例:

 *   input:7 3
 * output:8

 * 本题含有多组样例输入

思路分析:

 * 分析:用事件来描述,允许有的盘子空着不放这个事件Z包含两个互斥事件
          事件A → 存在空盘,即至少有一个盘子空着 ———— 问题转化为将m个苹果放到至多(n-1)个盘子里
          事件B → 不存在空盘,即每个盘子至少有一个苹果 ———— 问题转化为将(m-n)个苹果放到n个盘子里
          Z = A ∪ B,交集为空
 *       采用递归

 * 没有苹果(m=0),仅1种分法 ———— 全空
 * 一个苹果(m=1),仅1种分法 ———— 仅1个盘子有
 * 多个苹果(m≥2),至少1种分法

编程实现(C++):

/*
 ************************************************************
 * @author    SLF
 * @version	  V1.0.0
 * @date      26-Jun-2021
 ************************************************************
 */

#include <iostream>

using namespace::std;

int recursivePut(int m, int n);

int main(void)
{
	int K = 0;
	int m = 0, n = 0;
	
	while(cin>>m>>n)
	{
		//cout << m << " " << n << endl;
		if((0 > m) || (10 < m) \
		|| (1 > n) || (10 < n))
		{
			//printf("input param error... m=%d, n=%d\n", m, n);
			return 0;
		}
		
		K = recursivePut(m, n);
		cout << K << endl;
	}
	
	return 0;
}

int recursivePut(int m, int n)
{
	if((0 > m) || (1 > n))
	{//不存在空盘时苹果早已分完 或 存在空盘时空盘数量早已递归到一个
		return 0;
	}

	if((0 == m) || (1 == m))
	{//没有苹果 或 仅1个苹果(5,1,1和1,5,1是同一种分法)
		return 1;
	}

	return (recursivePut(m, n-1) + recursivePut(m-n, n)); //左边是 存在空盘,右边是 不存在空盘
}

  

郑重提示:①解题思路非最优,覆盖条件可能不全,仅供练习参考。

                  ②若有更佳思路或疑问,可在评论区留言相互讨论,不亦乐乎。

                  ③本文不允许转载,若认可本文,可点赞收藏关注。

校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆食堂。 拾领校园失物招领小程序继承了寻物启事失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码享或享至群聊朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值