假设有25美分,10美分,5美分,1美分的硬币足够多,假设有N美分钱,问你怎么用这些硬币表示?
用perl重新做这个问题,前面用[url="http://standalone.iteye.com/admin/blogs/1670164"]java[/url]做过
用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);