`
standalone
  • 浏览: 595971 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

找零钱问题

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

用perl重新做这个问题,前面用java做过

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);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics