百马驮货的数学之谜

张开发
2026/4/13 6:37:03 15 分钟阅读

分享文章

百马驮货的数学之谜
百马百担问题。100匹马驮100担货大马一匹驮3担中马一匹驮2担小马两匹驮1担。试编写程序计算大、中、小马的数目 题目背景回顾在解析代码前我们先明确一下题目规则根据代码逻辑推断总数限制一共有 100 匹马一共驮 100 担货。运载能力大马1 匹驮 3 担。中马1 匹驮 2 担。小马2 匹驮 1 担即 1 匹驮 0.5 担。隐含条件因为小马是“两匹驮一担”所以小马的数量必须是偶数。 代码详细解析1. 变量声明与表头声明了三个整型变量分别代表大马、中马、小马的数量。打印表头方便后续查看对齐的结果。2. 外层循环遍历大马数量逻辑尝试大马的数量从 0 开始增加。为什么是33因为大马每匹驮 3 担如果全是 大马最多只能有100 / 3 33.33匹。因为马必须是整数所以大马最多 33 匹。这是一个很好的剪枝优化减少了不必要的循环。3. 内层循环遍历中马数量逻辑在确定了大马数量后尝试中马的数量。为什么是50中马每匹驮 2 担如果全是中马最多100 / 2 50匹。关键优化条件big medium 100这是一个非常聪明的写法。如果大马和中马加起来已经超过 100 匹了那小马数量就是负数了这种情况肯定不成立。加上这个判断可以提前结束内层循环提高效率4. 计算小马数量这里没有使用第三层循环去遍历小马而是直接通过总数 100 减去大马和中马的数量得出。优点将三重循环优化成了双重循环大大降低了算法的时间复杂度。5. 核心判断条件 (If 语句)这是代码的灵魂只有同时满足以下三个条件才是一组正确的解small 0确保小马数量是非负数虽然在循环条件里已经限制了但这里再次确认更严谨。small % 2 0关键点确保小马数量是偶数。因为题目说“两匹小马驮一担”如果小马是奇数就没法正好驮整数担货物或者说会多出一匹小马没货驮。big * 3 medium * 2 small / 2 100计算总运载量。大马运big * 3担。中马运medium * 2担。小马运small / 2担因为 2 匹驮 1 担所以数量除以 2 就是担数。总和必须等于100。6. 输出结果 总结这段代码写得非常棒主要体现在降维打击利用small 100 - big - medium将三重循环简化为双重循环。边界控制big 33和medium 50的边界设定非常精准避免了无效计算。逻辑严密small % 2 0这一判断抓住了题目的隐含条件小马必须成对。

更多文章