<?php
/**
* 一个国王要赏赐一个大臣30枚金币,但其中有一枚是假币。国王提出要求:只能用一个天平作为测量工具,并用尽量少的比较次数找出这枚假币,
* 那么余下的29枚金币就赏赐给这个大臣;否则这个大臣将得不到赏赐。已知假币要比真币的分量略轻一些。
* 这个问题,我们可以采用分治的办法去解决,金币分成一半后没有剩余,则假币在轻的一边;如果分成两分剩余一个,
*则比较两部分,如果两个相等,则剩余的一个就是假币。如果两分中一份轻,则假币就是轻的一份中。然后在进行分治,
* 直到找到问题的答案
*/
header("Content-Type:text/html;charset=utf-8");
$findTime = 0;
/*
* 分俩组计算
*/
function getFalseCoin($coin, $low, $high)
{
$GLOBALS['findTime']++;
$tmp1 = 0;
$tmp2 = 0;
$tmp = 0;
//当比较最后两个时,判断那个值最小,返回小的那个值
if($low+1 == $high)
{
if($coin[$low] < $coin[$high])
{
return $low;
}
else
{
return $high;
}
}
//剩余硬币 个数
$tmp = $high - $low + 1;
//硬币数为偶数
if($tmp % 2 == 0){
$tmp1 = getCoinSum($coin,$low,$low