鸡兔同笼问题
有人在群里问鸡兔同笼问题如何使用编程实现,我们这里先看看这个概念是什么。百度百科解释如下:
鸡兔同笼,是中国古代著名典型趣题之一,记载于《孙子算经》之中。鸡兔同笼问题,是小学奥数的常见题型。许多小学算术应用题和填空题都可以转化成这类问题,或者用解它的典型解法--"假设法"来求解。因此很有必要学会它的解法和思路。通常是假设法比较简单易懂一点。
历史
鸡兔同笼是中国古代的数学名题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:
-
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
这四句话的意思是:
-
有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
最简单的方法实现如下:
<?php // 解法1 双重循环鸡兔 (这也是最基础的循环解法) // 鸡+兔=35 // 2*鸡+4*兔=94 $total_head=35; for ($chicken=1; $chicken < $total_head; $chicken++) { for ($rabbit=1; $rabbit < $total_head; $rabbit++) { if(($rabbit+$chicken==$total_head) && (2*$chicken + 4*$rabbit==94)) { echo "chiken:{$chicken}---rabbit:{$rabbit}"; break 2; } } } ?>
这个是比较傻的用两个变量来循环 循环之后还判断两个条件同时满足,然后就结束循环。
稍微提升一点是下面这样的做法
<?php // 解法2 循环鸡的数量 算出兔子的数量 // 鸡+兔=35 // 2*鸡+4*兔=94 $total_head=35; for ($chicken=1; $chicken < $total_head; $chicken++) {
$rabbit=$total_head-$chicken; if(2*$chicken + 4*$rabbit==94) { echo "chiken:{$chicken}---rabbit:{$rabbit}"; break; } } ?>
或者是这样的
<?php // 解法3 循环兔子的数量 计算鸡的数量 通常情况下可以循环少一点(仔细想想这是为什么) // 鸡+兔=35 // 2*鸡+4*兔=94 $total_head=35; for ($rabbit=1; $rabbit < $total_head; $rabbit++) {
$chicken=$total_head-$rabbit; if(2*$chicken + 4*$rabbit==94) { echo "chiken:{$chicken}---rabbit:{$rabbit}"; break; } } ?>
使用一个变量取代着表示另外一个变量然后完成这个循环 就稍微简单一点
下面的解法思路上稍微要绕个弯了
<?php // 解法4 砍足法 // 鸡+兔=35 // 2*鸡+4*兔=94 // 所有的动物砍掉两条腿 那么 鸡没有腿 兔子少两条腿 35个脑袋 应砍掉70条腿 // 剩余的94-70=24 都是兔子腿,则兔子24/2=12 鸡 35-12=23 $total_head=35; $total_foot=94; $rabbit=($total_foot-2*$total_head)/2; $chicken=$total_head-$rabbit; echo "chicken:{$chicken}---rabbit:{$rabbit}"; ?>
或者是这样
<?php // 解法5 增足法 // 鸡+兔=35 // 2*鸡+4*兔=94 // 所有的鸡增加两条腿 那么 鸡兔都是四条腿了 35个脑袋 应该有 35*4=140条腿 // 多出来的腿都是鸡的腿 多出来140-94=46,则鸡有46/2=23 兔子 35-23=12 $total_head=35; $total_foot=94; $chicken=(4*$total_head-$total_foot)/2; $rabbit=$total_head-$chicken; echo "chicken:{$chicken}---rabbit:{$rabbit}"; ?>
其实应该还有其他的方法,欢迎留言和我探讨。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2016-09-06 art template前端模板引擎
2016-09-06 jquery 书写全选反选功能