python分苹果问题_分苹果问题的C++和Python实现

本文探讨了一个有趣的组合问题——如何将苹果分堆。通过C++和Python两种语言实现递归算法来解决这一问题,强调了算法的逻辑和代码的可读性。在C++中,通过递归函数`allocation`进行分堆,而在Python中,使用全局变量和`allocate`函数实现相同功能,但Python代码更简洁。
摘要由CSDN通过智能技术生成

很好玩的一个问题。话说小明的苹果怎么可能一模一样?

显然这并不是重点。重点在于抽象这个问题的方法。

如果从M个苹果,拿出N个苹果,问有几种可能性,很明显这是典型的组合问题;

如果把M个苹果等分成N份。显然只有1种可能。

把苹果分成N堆,求可能性,我一时半会想不出什么数学模型。自然而然,想到了数学方法:迭代逼近和递归。

题目额外说明,1,3,1 和1,1,3算同一种分法。其分发可能等价于将苹果递减或者递增排列。

于是我们开始递归计数:

递归操作:遍历M~0,如果存在M比数组之前的元素小,说明这是递减情况下的最大可能,就给新的元素赋值M,并且为剩下的元素进行递归操作。

递归退出条件: 数组最后一位也完成赋值(剩下的元素正好小于等于之前的数)。

递归退出操作: 计数器加一。如果愿意,可以输出此时的数组。

C++ 实现算法(值得我自己练习和细品)#include "stdafx.h"

#include 

int Count = 0;

using namespace std;

void printArr(int dishNum, int* arr){

for (int i = 0; i 

for (int j = 0; j 

cout <

cout <

}

cout <

}

void allocation(int 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值