python分苹果问题_给大家分享一个「Python算法题」分苹果

python分苹果问题_给大家分享一个「Python算法题」分苹果今天刷到一道算法题,分享一下果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?可以先尝试一下再往下看(N=5的时候,答案是3121)。先简单分析一下这道题目,假设当第k个熊取完之后还有M个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

今天刷到一道算法题,分享一下

果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?

可以先尝试一下再往下看(N=5的时候,答案是3121)。

先简单分析一下这道题目,假设当第k个熊取完之后还有M个苹果,按照题目的意思,M除以N的余数恰好是1,那么第k+1只熊可以拿到(M-1)/N个苹果,第k只熊取之前有MN/(N-1)+1个苹果。 换句话说,这堆苹果满足一个性质,对于每一只熊,取之前取之后的苹果数除以N都余1,取之后的苹果数整除(N-1)*。

这样考虑的话,我们可以从最后一只熊开始向前倒推总的苹果数num,最后一只熊取走了N份苹果中的1份,所以剩下的苹果一定为N-1的倍数,所以num初始值一定为N-1的倍数。

把num初值为 N-1之后,开始倒推,上一只熊取之前的苹果数为num = num + num/(N-1)+1,再判断这个数字能否被N-1整除,若可以,继续向前倒推,若不能,说明num不满足条件,将num初值更新为2(N – 1),重复上述过程,若nun不满足条件,再设置为3(N-1),依次类推,直到循环中的num都能被N-1整除,这时候的num为满足条件的最小值,可能说的不是很清楚,直接看代码

8595f7f7840f

给大家分享一个「Python算法题」分苹果

再仔细分析一下这个题目,如果把每只熊取之前的苹果数记做一个序列

8595f7f7840f

给大家分享一个「Python算法题」分苹果

根据之前的分析,倒数第k次取之前的苹果数是倒数k+1次取之前的苹果扔掉一个再取走一份后剩下的,所以有关系式:

8595f7f7840f

给大家分享一个「Python算法题」分苹果

同时倒数第一只熊取之前的苹果数满足条件:

8595f7f7840f

给大家分享一个「Python算法题」分苹果

这里|表示整除,因为它需要扔掉一个然后分成N份。换种表示方式可以写成

8595f7f7840f

给大家分享一个「Python算法题」分苹果

综合到一起,所有的条件可以描述为

8595f7f7840f

给大家分享一个「Python算法题」分苹果

有没有感觉很熟悉,这不就是高中的数列递推公式?把通项公式求出来就完事了,根据上面的递推式,有

8595f7f7840f

给大家分享一个「Python算法题」分苹果

最后得到

8595f7f7840f

给大家分享一个「Python算法题」分苹果

因为xN必须是整数,所以m取值不能任意,有一定的限制,实际上已经非常明确了,要使得xN是整数,只要让m的取值恰好可以消掉中式子的分母就可以了,最终可以得到

8595f7f7840f

给大家分享一个「Python算法题」分苹果

其中

8595f7f7840f

给大家分享一个「Python算法题」分苹果

这样我们实际上求出了所有满足条件的苹果数量,如果只要最小数量,让t=1就可以啦,最终得到

8595f7f7840f

给大家分享一个「Python算法题」分苹果

这样代码就变得非常非常非常简单。

8595f7f7840f

给大家分享一个「Python算法题」分苹果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183461.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月10日 下午5:36
下一篇 2022年10月10日 下午5:36


相关推荐

  • 数学思想:4、数学归纳法

    数学思想:4、数学归纳法数学归纳法什么是数学归纳法对于某些使用迭代法或者递归的代码 验证的时候可以避免一步步的计算 直接从理论上证明某个结论 节约大量的计算资源和时间 这就是数学归纳法 数学归纳法的步骤证明基本情况 通常是 n 1 的时候 是否成立假设 n k 1 成立 再证明 n k 也是成立的 k 为任意大于 1 的自然数 数学归纳和递归的关系递归调用的代码和数学归纳法的逻辑是一致的 只

    2026年3月16日
    2
  • MongoDB可视化工具Robo 3T基础使用

    MongoDB可视化工具Robo 3T基础使用nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 上一篇博客 最详细的 Windows 平台安装 MongoDB 教程 已经为大家详细介绍了安装 MongoDB 的过程 其中也提及到了 MongoDB 可视化工具 Robo3T 当然 还有其他的工具 通过本篇博客 你将学会使用 Robo3T 的基本功能 文章目录 1 下载安装包 2 打开 robo3t exe 并配置连接 3 创

    2026年3月20日
    2
  • KMP算法:next和nextval值计算

    KMP算法:next和nextval值计算KMP算法的next和nextval值计算先看看next数据值的求解方法例:下标从1开始(若题中给定下标为0开始,把所有值-1即可)next数组的求解方法:根据前一个字符next,一直循环找到第

    2022年7月2日
    29
  • [Android] [逆向工程] 安卓逆向入门篇

    [Android] [逆向工程] 安卓逆向入门篇掌握逆向工程可以带给你哪些技能 抓取 APP 内容 制作套壳包拦截 APP 数据 激活成功教程单机游戏修改游戏属性行为 加强反逆向的防范意识逆向手段介绍我了解到的安卓逆向有复现工程 侵入工程 注入工程三种手段 复现工程复现工程是指通过工具将 APK 转换为 Android 工程 并对 Android 工程的配置项修复使其可以正常运行 只要工程可以被成功复现接下来就可以为所欲为了 事实上并不是所有工程都可以被成功复现 而且需要花费大量的时间去复原工程 这也非常考验开发人员的耐心和技术经验 侵入工程侵入工程

    2026年3月17日
    2
  • ora-01006:绑定变量不存在_ora-00001: 违反唯一约束条件

    ora-01006:绑定变量不存在_ora-00001: 违反唯一约束条件java.sql.SQLException:ORA-01008:并非所有变量都已绑定此异常为sql异常,我遇到的时候看java代码如下publicvoidsavegdzcysxx(Gdzcxxgdzcxx){  Stringsql=”insertintogdzcxx(id,zcmc,ggxh)values(SEQ_GDZC_ID.nextVAL,?,?)”;  Mys

    2025年9月27日
    4
  • pycharm 2021.11.3激活补丁【2021.10最新】[通俗易懂]

    (pycharm 2021.11.3激活补丁)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~2…

    2022年3月29日
    74

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号