您的位置:首页 > 其它

找最少硬币问题

2011-07-20 23:05 405 查看
9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。

售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为

2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩

<?php
/*
9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。
售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为
2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩
*系统环境:windows/linux
*编译环境:php4/php5
*输入参数:存放在in.txt,多个参数时空格分隔
参数1是一个小数,表示小孩买的糖的价格,必须小于1
例如0.36
输出:out.txt
*/

$params=getParams(1);
$argv0=trim($params[0]);
//检查参数1
if(!is_numeric($argv0))
{
error_msg("params 1 must be a numbers");
}
if($argv0 > 1)
{
error_msg("params 1 must be a float < 1");
}
$onedoll=100;//1美元=100美分
$coins=array(25,10,5,1);
$payback=$onedoll-$argv0*$onedoll;
$paybackCoins=array();
while($payback > 0)
{
foreach($coins as $coin)
{
//每次都从最大币值开始循环
if($payback >= $coin)
{
$paybackCoins[]=$coin;
$payback-=$coin;
break;
}
}
}
//输出结果
output("payback with lest coins:".join(",",$paybackCoins),true);
error_msg("execute success");
/*
从in.txt里读取参数

*/
function getParams($paramNum)
{
$in=file_get_contents("in.txt");
if($in===FALSE){
error_msg("cannot read in.txt,please check in.txt exists\n");
}
$in=preg_replace("/(\s+)/i", " ", $in);
//多个参数时,按照空格分隔
$parms=split(" ",trim($in));
if($parms===FALSE)
{
error_msg("cannot get param from in.txt\n");
}
if(count($parms) < $paramNum)
{
error_msg("it needs $paramNum params\n");
}
return $parms;
}

/*
把结果输出到输出文件里
当isClean=true时清空out.txt
*/
function output($msg,$isClean=false)
{
if($isClean)
{
$handle = fopen('out.txt', 'w');
fclose($handle);
}
error_log($msg."\n", 3, "out.txt");
}
/*
输入错误信息
如果$is_exit表示输入信息后退出
*/
function error_msg($msg,$is_exit=true)
{
if($is_exit)
die($msg."\n");
else
echo $msg."\n";
}
?>


本文出自 “一方有” 博客,请务必保留此出处http://yifangyou.blog.51cto.com/900206/618828
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: