84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
100铜币=1银 100银=1金
想写个根据多少铜币 返回相应等级的钱 比如参数为102135铜币 那就是返回10金21银35铜比如参数为1544铜币 那就是返回15银44铜以此类推...
102135铜币
10金21银35铜
1544铜币
15银44铜
php基础不扎实 不知道怎么写最精简
光阴似箭催人老,日月如移越少年。
/** * [format_every 换算进制到指定单位] * @param integer $number [需要换算数值] * @param integer $ary [每个单位之间的进制] * @param array $units [每个单位的描述] * @return [String] [格式化结果] */ function format_every($number,$ary = 100,$units = array('铜', '银', '金')) { $format = ''; $prev = 0; for($i = count($units) - 1 ; $i >= 0 ; $i--){ if($next = floor($number / pow($ary, $i))){ $format .= $next - $prev * $ary . $units[$i]; } $prev = $next; } return $format; } //简单点的 print_r(format_every(12345678));//1234金56银78铜 //假如1坨=100金,则: print_r(format_every(12345678,100,array('铜', '银', '金','坨')));//12坨34金56银78铜 //字节换算 print_r(format_every(123456789,1024,array('B', 'KB', 'MB', 'GB', 'TB', 'PB')));//117MB755KB277B
function exchange($copper) { $gold = (int) ($copper / 10000); $silver = (int) ($copper / 100 - $gold * 100); $copper = $copper % 100; return array($gold, $silver, $copper); }
简单做。从额数最大的金开始处理,先整除,再模除,金银铜依次处理。输出的时候判断再做个判断,代码如下:
<?php function level($money){ $gold = floor($money / 10000); $money = $money % 10000; $sliver = floor($money / 100); $cu = $money % 100; $result = ""; if($gold > 0) { $result .= $gold ."金"; } if($sliver > 0) { $result .= $sliver ."银"; } if($cu > 0) { $result .= $cu ."铜"; } return $result; } //test echo level(102135); echo "<hr>"; echo level(1544); echo "<hr>"; echo level(99);
function level($money){ $ag = floor($money /100); $cu = $money % 100; $golden = floor($ag / 100); $ag = $ag % 100; echo "{$golden}金{$ag}银{$cu}铜币"; }
很简单的写了一个。
def make_change(money, coins) dp = [0] path = [] result = {} coins.each_with_index do |coin, index| coin.upto(money) do |i| if !dp[i - coin].nil? && (dp[i].nil? || dp[i - coin] + 1 < dp[i]) dp[i] = dp[i - coin] + 1 coins[index] += 1 path[i] = i - coin end end end if path[money].nil? puts "impossible." and return end i = money loop do break if path[i].nil? result[i - path[i]] ||= 0 result[i - path[i]] += 1 i = path[i] end p result # 具体解 end make_change(102135, [10000, 100, 1]) # => {1=>35, 100=>21, 10000=>10}
嗯...不知道计算速度快 还是字符串截取速度快
<?php $money = 102135; convert_money($money); function convert_money($money) { $money = (string)$money; $coppers = substr($money,-2) ? substr($money,-2) : 0; $silver = substr($money,-4,-2) ? substr($money,-4,-2) : 0; $glod = substr($money,0,-4) ? substr($money,0,-4) : 0; echo "{$glod}金币{$silver}铜币{$coppers}银币"; }
结果: 10金币21铜币35银币
function change($number){
static $jin; static $yin; static $ton; if($number >= pow(10,4)){ $jin = intval($number/pow(10,4)); change($number -$jin*pow(10,4)); }else if($number >= pow(10,2)){ $yin = intval($number/pow(10,2)); change($number-$yin*pow(10,2)); }else{ $ton = $number; } return array($jin,$yin,$ton); } $number = 10110245; print_r(change($number));
/** * @param $coins int 币数 * @return string 格式化信息 */ function coinFormatter($coins) { $coins = intval($coins); $jin = intval($coins/10000); $yin = intval($coins/100 - $jin*100); $tong = $coins%100; $info = ''; if($jin>0) { $info = $jin . "金"; } if($yin>0){ $info = $info.$yin."银"; } if($tong >0){ $info = $info.$tong."铜"; } return $info; } echo coinFormatter(114523); echo "\n"; echo coinFormatter(523); echo "\n"; echo coinFormatter(3); /* 输出结果: 11金45银23铜 5银23铜 3铜 */
关注微信公众号php技术大全:phpgod,精彩分享每日不断。
简单做。从额数最大的金开始处理,先整除,再模除,金银铜依次处理。输出的时候判断再做个判断,代码如下:
很简单的写了一个。
嗯...不知道计算速度快 还是字符串截取速度快
结果: 10金币21铜币35银币
function change($number){
关注微信公众号php技术大全:phpgod,精彩分享每日不断。