Python实现分苹果(递归)
目录
题目描述
输入/输出描述
题目分析
代码展示
传送门
题目描述
M个同样的苹果分在N个同样的篮子里,允许有篮子空着不放,求一共有多少种不同的分法。
说明,3,1,1和1,3,1是一种分法;篮子可以放入的苹果数量没有最大限制。
输入/输出描述
输入:两个整数M和N,例如 7 3
输出:一个整数K,表示一共有K种分苹果的方法。
题目分析
先假设篮子数量和苹果数足够多,输入合法。当苹果的数量少于篮子数,至少有basket - apple个篮子是空的,也就是说这部分篮子是多余的,去掉它们对结果没有任何影响。
当苹果数量大于篮子的时候,由于没有制定每个篮子放置苹果的上限,因此每个篮子可以放无数多个苹果,也可以空置。因此在这种情况下,分苹果的分法是两种子情况的总和,即保证所有篮子里放着苹果和允许有篮子空着。
进一步分析允许所有篮子都有苹果:
因为所有篮子都有苹果,将每个篮子中拿掉一个苹果,对计算结果没有影响,且可以将问题的规模简化。因此在这种情况下,apple和basket的分法等于apple - basket和basket。
允许有篮子空置:
这种情况可以理解为,至少有一个篮子空着,至少有两个篮子空着...直到只有一个篮子能装苹果。将这些所有的可能加起来,就是这个子情况的分法总数量。
接下来讨论临界情况,当没有苹果,或者只剩下一个篮子的时候,这时候只有一种方法(递归出口)。
异常情况:苹果和篮子数量小于0,没有这种情况的分法。
代码展示
def share(apple, basket):if apple < 0 or basket <= 0:return 0elif apple == 0 or basket == 1:return 1elif apple < basket:return share(apple, apple)else:return share(apple, basket - 1) + share(apple - basket, basket)echo = list(map(int, input().split()))
apple = echo[0]
basket = echo[1]
print(share(apple, basket))
传送门
1. input()函数
https://blog.csdn.net/TCatTime/article/details/82556033
2. split()函数
https://blog.csdn.net/TCatTime/article/details/82053259
3. int()函数
https://blog.csdn.net/TCatTime/article/details/82826824
4. map()函数
https://blog.csdn.net/TCatTime/article/details/82942412
5. list()函数
https://blog.csdn.net/TCatTime/article/details/82947385
6. print()函数
https://blog.csdn.net/TCatTime/article/details/83450692
Python实现分苹果(递归)相关推荐
- 【python】分苹果
问题:一堆苹果,5个人.第一个人将苹果丢掉一个,然后平均分成5份后拿走其中的一份:第二个人将剩余的苹果丢掉一个,然后再平均分成5份后拿走其中的一份,依次类推...第五个人在第四个人拿走剩下的那部分苹果 ...
- python分苹果问题_蓝桥杯--算法提高--VIP--分苹果题目(差分数组)
1. 问题描述: 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1..N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋 ...
- java递归分苹果_递归应用示例(放苹果)[较难 选听]
ok,下面我们再看一个例子. 这个例子呢比较有意思. 这个例子名字叫放苹果.这是open jar 的上面比较经典的一道题目. 我们来看一下这个题目.说啊,有M个同样的苹果. 这M个苹果呢一模一样没有区 ...
- python【蓝桥杯vip练习题库】ADV-183分苹果(差分数组 离线区间)
试题 算法提高 分苹果 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1-N.有M个老师,每次第i个老师会给第Li个到第Ri个 ...
- 小学奥数 7826 分苹果 python
http://noi.openjudge.cn/math/7826/ """ 小学奥数 7826 分苹果 http://noi.openjudge.cn/math/782 ...
- 史上最全的整数分解方法(包含经典的分苹果问题)
[华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...
- [华为机试真题]70.分苹果
题目 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放.1<=M<=10,1<=N<=10例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法输入 7 3输出 ...
- Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用
文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...
- PTA—输出全排列 (20分) 递归回溯思想
PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...
最新文章
- 公众号留言-2020-4-1
- python爬虫流程-Python爬虫程序架构和运行流程原理解析
- 【算法基础】常用的数据结构与算法
- 观察者模式在源码中的应用
- java perm 查看_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细
- linux通过不同端口访问,linux下两个tomcat通过不同端口访问不同项目
- 推荐系统--矩阵分解(5)
- LeetCode141-环形链表(Linked List Cycle)-Rust语言实现
- Java编程的逻辑 (56) - 文件概述
- JavaScript计算指定日期与当前日期的相差天数
- 2038: [2009国家集训队]小Z的袜子(hose) - BZOJ
- angularjs1.x版本,父子组件之间的双向绑定
- 英特尔再现安全漏洞:2011年后计算机几乎全中枪,可窃取你的密码及数据
- code blocks代码性能分析_介绍几款Python性能优化工具
- python微信语音转发方法_微信语音转发最方便的方法,我现在才知道
- windows开机启动方法
- 概率论基础-严士健 第二版 习题与补充3.2答案
- 如视技术副总裁杨永林:当传统产业遇到“数字空间”
- cogs2398 切糕 最小割
- 融资1个亿,5000万给魔窗,凭啥?