找零钱问题

假设有25美分,10美分,5美分,1美分的硬币足够多,假设有N美分钱,问你怎么用这些硬币表示?

用perl重新做这个问题,前面用[url="http://standalone.iteye.com/admin/blogs/1670164"]java[/url]做过


use strict;
use warnings;

my $count = 0;
sub changes {
my ($coins_ref, $factors_ref, $value) = @_;
my @coins = @$coins_ref;
if($value == 0){
$count++;
print "Result $count\n";
foreach my $key (keys %$factors_ref){
print "coin: $key => $factors_ref->{$key};\n";
}
print "\n";
}elsif(scalar @coins == 1){
$factors_ref->{1} = $value;
$count++;
print "Result $count\n";
foreach my $key (keys %$factors_ref){
print "coin: $key => $factors_ref->{$key};\n";
}
}else {
my $big = shift @coins;
my $num = 0;
while($big * $num <= $value){
my @coins_now = @coins;
my $original = $factors_ref->{$big};
$factors_ref->{$big} = $num;
$value -= $big * $num;
changes(\@coins_now, $factors_ref, $value);
$factors_ref->{$big} = $original;
$value += $big * $num;
$num++;
}
}
}

my @a = (25, 10, 5, 1);
my $b = {25 => 0, 10 => 0, 5 => 0, 1 => 0};
changes(\@a, $b, 26);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值