9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。
售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为
2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩

 

  1. <?php  
  2. /*  
  3. 9:一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。  
  4. 售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为  
  5. 2 5美分、1 0美分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩  
  6. *系统环境:windows/linux  
  7. *编译环境:php4/php5  
  8. *输入参数:存放在in.txt,多个参数时空格分隔  
  9.                     参数1是一个小数,表示小孩买的糖的价格,必须小于1  
  10.                         例如0.36  
  11.     输出:out.txt  
  12. */ 
  13.  
  14. $params=getParams(1);  
  15. $argv0=trim($params[0]);  
  16. //检查参数1  
  17. if(!is_numeric($argv0))  
  18. {  
  19.     error_msg("params 1 must be a numbers");  
  20. }  
  21. if($argv0 > 1)  
  22. {  
  23.     error_msg("params 1 must be a float < 1");  
  24. }  
  25. $onedoll=100;//1美元=100美分  
  26. $coins=array(25,10,5,1);  
  27. $payback=$onedoll-$argv0*$onedoll;  
  28. $paybackCoins=array();  
  29. while($payback > 0)  
  30. {  
  31.     foreach($coins as $coin)  
  32.     {  
  33.         //每次都从最大币值开始循环  
  34.         if($payback >= $coin)  
  35.         {  
  36.             $paybackCoins[]=$coin;  
  37.             $payback-=$coin;  
  38.             break;  
  39.         }  
  40.     }  
  41. }  
  42. //输出结果  
  43. output("payback with lest coins:".join(",",$paybackCoins),true);  
  44. error_msg("execute success");  
  45. /*  
  46.     从in.txt里读取参数  
  47.       
  48. */ 
  49. function getParams($paramNum)  
  50. {  
  51.     $in=file_get_contents("in.txt");  
  52.     if($in===FALSE){  
  53.         error_msg("cannot read in.txt,please check in.txt exists\n");     
  54.     }  
  55.     $in=preg_replace("/(\s+)/i"" "$in);  
  56.     //多个参数时,按照空格分隔  
  57.     $parms=split(" ",trim($in));  
  58.     if($parms===FALSE)  
  59.     {  
  60.         error_msg("cannot get param from in.txt\n");  
  61.     }  
  62.     if(count($parms) < $paramNum)  
  63.     {  
  64.         error_msg("it needs $paramNum params\n");  
  65.     }  
  66.     return $parms;  
  67. }  
  68.  
  69. /*  
  70.     把结果输出到输出文件里  
  71.     当isClean=true时清空out.txt  
  72. */ 
  73. function output($msg,$isClean=false)  
  74. {  
  75.     if($isClean)  
  76.     {  
  77.     $handle = fopen('out.txt''w');  
  78.     fclose($handle);      
  79.     }  
  80.     error_log($msg."\n", 3, "out.txt");  
  81. }  
  82. /*  
  83.     输入错误信息  
  84.     如果$is_exit表示输入信息后退出  
  85. */ 
  86. function error_msg($msg,$is_exit=true)  
  87. {  
  88.     if($is_exit)  
  89.         die($msg."\n");  
  90.     else 
  91.         echo $msg."\n";  
  92. }  
  93. ?>