考虑一个商品,其中商品具有每单位价格,但也包括数量 价格。例如,苹果每个可能是1.00美元,或者是3.00美元。
实施接受任意操作的销售点扫描API 产品订购(类似于结账行中会发生的情况) 然后返回整个购物车的正确总价 基于每单位价格或适用的批量价格。
以下是按代码列出的产品和使用的价格(有 没有销售税):
产品代码|价
A | $ 2.00每个$ 4.00 $ 7.00
B | $ 12.00
C |六包装$ 1.25或$ 6
D | $ 0.15
应该有一个顶级销售点终端服务对象 像下面的伪代码。你可以自由设计和 按照您的意愿实现其余代码,包括您的方式 指定系统中的价格:
terminal.setPricing(...)terminal.scan(“A”)terminal.scan(“C”)... etc. result = terminal.total
以下是您应该用于测试用例的最小输入。这些 必须证明测试用例在您的程序中有效:
按此顺序扫描这些项目:ABCDABAA;验证总价格是多少 $ 32,40。按此顺序扫描这些项目:CCCCCCC;验证总数 价格是7.25美元。按此顺序扫描这些项目:ABCD;验证总数 价格是15.40美元。
答案 0 :(得分:3)
1)对于每个项目,存储单价,组价格和每组的单位。
2)在扫描阶段,只需跟踪每件物品的单位数量。
3)对于每个项目,增加成本:
(number units) / (units per group for item) * group price +
(number units) % (units per group for item) * unit price
在项目数量的顺序上使用线性空间量,并使用线性量来跟踪扫描项目的计数。运行时也是线性的。
您可以在PHP中实现:test.php
<?php
echo "Please input the product code string:";
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
echo 'input : ' .$line. "n";
$inputProducts = rtrim($line);
$total = 0;
$inputArray = str_split($inputProducts, 1);
$counts = array_count_values($inputArray);
$productsprice = array('A'=>array('1'=>2.00, '4'=>7.00), 'B'=>array('1'=>12.00), 'C'=>array('1'=>1.25, '6'=>6.00), 'D'=>array('1'=>0.15));
foreach($counts as $code=>$amount) {
echo "Code : " . $code . "n";
if(isset($productsprice[$code]) && count($productsprice[$code]) > 1) {
$groupUnit = max(array_keys($productsprice[$code]));
$subtotal = intval($amount / $groupUnit) * $productsprice[$code][$groupUnit] + fmod($amount, $groupUnit) * $productsprice[$code]['1'];
$total += $subtotal;
}
elseif (isset($productsprice[$code])) {
$subtotal = $amount * $productsprice[$code]['1'];
$total += $subtotal;
}
echo "Subtotal: " . $subtotal . "n";
}
echo 'Final Total: $' . number_format($total, 2). "n";
?>
执行CLI:php test.php