use strict; use warnings; my @coins = (1, 25, 100, 1000); my $tgt = ; chomp $tgt; my %f = (0 => 0); my %n_f = %f; my $val = 0; my $quo = 0; while(!defined($f{$tgt})){ for my $i (keys %f){ for my $j (@coins){ $val = $i+$j; $quo = $j == 1000 ? $f{$i} : $f{$i}+1; if(!defined($n_f{$val})){ $n_f{$val} = $quo; }else{ if($quo < $n_f{$val}){ $n_f{$val} = $quo; } } } } %f = %n_f; } print $f{$tgt};