找最少硬币问题
2011-07-20 23:05
405 查看
9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。
售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为
2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩
本文出自 “一方有” 博客,请务必保留此出处http://yifangyou.blog.51cto.com/900206/618828
售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为
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