八枚硬币求解假币
2015-08-07 14:57
417 查看
算法分析:
现有八枚银币a,b,c,d,e,f,g。已知其中一枚是假币,其重量不同于真币,但是不知谁轻谁重,如何使用天平以最少的比较次数,决定哪枚是假币,并得知真币和假币谁轻谁重。
要求以最少的比较次数,我们不能使用单纯的回圈比较来求解,我们可以使用决策树, 具体决策树算法原理可以查看这篇文章~
/article/4912240.html
一个简单的情况是这样的,我们比较a+b+c和d+e+f的重量,如果相等,则假币必是g和h,我们再比较g和h的轻重,如果g较重,再与a比较(a是真币),如果g等于a,则g为真币,h为假币,由于h比g轻,而g是真币,则假币的重量比真币轻。
算法如下:
现有八枚银币a,b,c,d,e,f,g。已知其中一枚是假币,其重量不同于真币,但是不知谁轻谁重,如何使用天平以最少的比较次数,决定哪枚是假币,并得知真币和假币谁轻谁重。
要求以最少的比较次数,我们不能使用单纯的回圈比较来求解,我们可以使用决策树, 具体决策树算法原理可以查看这篇文章~
/article/4912240.html
一个简单的情况是这样的,我们比较a+b+c和d+e+f的重量,如果相等,则假币必是g和h,我们再比较g和h的轻重,如果g较重,再与a比较(a是真币),如果g等于a,则g为真币,h为假币,由于h比g轻,而g是真币,则假币的重量比真币轻。
算法如下:
<span style="font-family:Microsoft YaHei;"> functioncompareheight($coins,$i,$j,$k){ if($coins[$i] >$coins[$k]){ echo "假币".($i+1)." 较重"; }else{ echo "假币".($j+1)." 较轻"; } } functioneightcoins($coins){ if($coins[0] +$coins[1] + $coins[2] == $coins[3] + $coins[4] + $coins[5]){ if($coins[6]> $coins[7]){ compareheight($coins,6,7,0);//将其与第一枚真币比较 }else{ compareheight($coins,7,6,0); } }else if($coins[0] +$coins[1] + $coins[2] > $coins[3] + $coins[4] + $coins[5]) { if($coins[0]+ $coins[3] == $coins[1] + $coins[4]){ compareheight($coins,2,5,0); }elseif($coins[0] + $coins[3] > $coins[1] + $coins[4]){ compareheight($coins,0,4,1); }else{ compareheight($coins,1,3,0); } }else if($coins[0] +$coins[1] + $coins[2] < $coins[3] + $coins[4] + $coins[5]){ if($coins[0]+ $coins[3] == $coins[1] + $coins[4]){ compareheight($coins,5,2,0); }elseif($coins[0] + $coins[3] > $coins[1] + $coins[4]){ compareheight($coins,3,1,0); }else{ compareheight($coins,4,0,1); } } } </span>
相关文章推荐
- Linux - grep的一些进阶选项
- 通过设备指针调用其他驱动程序(异步方式)
- composer 报 zlib_decode(): data error
- String之常量池小结
- 【实验室】建立springMVC的简单项目
- 基于VC面部识别软件(识别出人脸特征)
- Java 执行引擎(从字节码到机器码)
- 快速排序算法
- 使用apache搭建http文件服务器
- 《哪来的天才》读书笔记
- redis 在linux下的安装
- delphi xe 窗体子控件实现窗体拖动
- MySql绿色版安装配置
- C4047、间接级别、间接寻址级别不同
- uva 11292 Dragon of Loowater
- 【VMCloud云平台】SCVMM进阶篇(一)网络虚拟化(1)
- iptables
- javascript实现鼠标移到Image上方时显示文字效果的方法
- Ios后台任务运行实现
- kuangbin带你飞 专题十 匹配问题