1. 开始20元 10 瓶啤酒 结果:
10 -- 10
newBottle: 7, newCaps: 7
totalBottles: 17, leftBottles: 0, leftCaps: 9
7 -- 9
newBottle: 5, newCaps: 5
totalBottles: 22, leftBottles: 1, leftCaps: 6
5 -- 6
newBottle: 4, newCaps: 4
totalBottles: 26, leftBottles: 0, leftCaps: 6
4 -- 6
newBottle: 3, newCaps: 3
totalBottles: 29, leftBottles: 0, leftCaps: 5
3 -- 5
newBottle: 2, newCaps: 2
totalBottles: 31, leftBottles: 1, leftCaps: 3
2 -- 3
newBottle: 1, newCaps: 1
totalBottles: 32, leftBottles: 1, leftCaps: 4
1 -- 4
newBottle: 2, newCaps: 2
totalBottles: 34, leftBottles: 0, leftCaps: 2
2 -- 2
newBottle: 1, newCaps: 1
totalBottles: 35, leftBottles: 0, leftCaps: 3
1 -- 3
Total Bottles of beer: 35
left empty bottles: 1
left caps: 3
2. 开始10元 5 瓶啤酒 结果:
5 -- 5
newBottle: 3, newCaps: 3
totalBottles: 8, leftBottles: 1, leftCaps: 4
3 -- 4
newBottle: 3, newCaps: 3
totalBottles: 11, leftBottles: 0, leftCaps: 3
3 -- 3
newBottle: 1, newCaps: 1
totalBottles: 12, leftBottles: 1, leftCaps: 4
1 -- 4
newBottle: 2, newCaps: 2
totalBottles: 14, leftBottles: 0, leftCaps: 2
2 -- 2
newBottle: 1, newCaps: 1
totalBottles: 15, leftBottles: 0, leftCaps: 3
1 -- 3
Total Bottles of beer: 15
left empty bottles: 1
left caps: 3
==========================
Perl script:
# 6 = 19, 5 --- 15, 3 --- 7 2 -- 3, 10 -- 35
#
# 啤酒2块钱1瓶,4个盖换1瓶,2个空瓶换1瓶,10块可以喝几瓶?
#
#
#
#
$startBottlesOfBeer = 10;
$totalBottles = $startBottlesOfBeer;
$leftBottles = 0;
$leftCaps = $startBottlesOfBeer;
$lastBottle = 0;
calc($totalBottles,$leftCaps);
print "Total Bottles of beer: $totalBottles\n";
print "left empty bottles: $lastBottle\n";
print "left caps: $leftCaps\n";
sub calc($bottle, $caps)
{
$bottle = shift;
$caps = shift;
print "$bottle -- $caps\n";
if ($bottle < 2 && $caps < 4)
{
return;
}
$lastBottle = 1;
my $newBottle = int(($bottle + $leftBottles) / 2) + int ($leftCaps / 4);
my $newCaps = $newBottle;
print "newBottle: $newBottle, newCaps: $newCaps\n";
$totalBottles += $newBottle;
$leftBottles = ($bottle + $leftBottles) % 2;
$leftCaps = ($newCaps) + $leftCaps % 4;
print "totalBottles: $totalBottles, leftBottles: $leftBottles, leftCaps: $leftCaps\n\n";
calc($newBottle , $leftCaps)
}