2013-03-15 2 views
0

Как я могу подсчитать, сколько кварталов, монет, никелей и пенни приходится на $ 10?Как подсчитать числа, представляющие деньги, используя Perl?

Я знаю, что мне нужно какое-то время, но я не знаю, в каком состоянии было бы время.

Тогда я сделал это:

while(#read from a file) 
print $cents 
$left = $cents %25 #i did this since quarter is the largest change we have. 

После того, что я не знаю, как поступить с письмом, сколько кварталов, пятаков, никелевые и пенни есть.

ответ

0

Вы могли бы начать, глядя на то, как работать с одной монеты:

my $break_apart = 1000; # ten dollars, in pennies 
my $break_into = 25; # a quarter 
my $remainder = $break_apart % $break_into; 
my $count = ($break_apart - $remainder)/$break_into; 

Затем расширить, что работать с несколькими монетами:

my @coins = (1, 5, 10, 25); 
my $break_apart = 1000; # ten dollars, in pennies 
for my $break_into (@coins) 
{ 
    my $remainder = $break_apart % $break_into; 
    my $count = ($break_apart - $remainder)/$break_into; 
} 
3

Если вы пытаетесь выяснить изменения, работайте в процентах (недолларовые суммы) и вычитайте максимальное количество самой крупной монеты, затем максимальное количество следующей крупнейшей монеты и т. д. С монетой 1,5,10,25, я думаю, что это всегда будет на ответ, который использует наименьшие монеты (хотя это не будет иметь место для другой доступной монеты с).

my $amount_in_cents = 1000; # $10 * 100¢/$ 

my @coins = (25, 10, 5, 1); 
my @change; 
for my $coin (@coins) { 
    push @change, int($amount_in_cents/$coin); 
    $amount_in_cents -= $change[-1] * $coin; 
} 

say join ', ', map "$change[$_]x$coins[$_]¢", grep $change[$_], 0..$#coins; 
+1

Жадный алгоритм внесения изменений является оптимальным, если каждая монета по меньшей мере вдвое больше, чем следующая. –

+0

@ Грег Бэкон, изящный, спасибо. – ikegami

Смежные вопросы