考虑一个商店,其中的商品有单位价格,但也有数量价格。例如,苹果可能每个 1.00 美元或 4 个苹果 3.00 美元。
实施一个销售点扫描 API,该 API 接受任意的产品订购(类似于在结帐行发生的情况),然后根据单价或批量价格返回整个购物车的正确总价适用的。
以下是按代码列出的产品和要使用的价格(没有销售税):
产品编号 | 价格
一个 | 每个 2.00 美元或 7.00 美元 4 个
乙| 12.00 美元
C | 六包 1.25 美元或 6 美元
D | 0.15 美元
应该有一个类似于以下伪代码的顶级销售点终端服务对象。您可以随意设计和实现其余代码,包括如何在系统中指定价格:
terminal.setPricing(...) terminal.scan("A") terminal.scan("C") ... 等等 result = terminal.total
以下是您应该用于测试用例的最少输入。必须证明这些测试用例可以在您的程序中工作:
按此顺序扫描这些项目:ABCDABAA;确认总价为 32.40 美元。按此顺序扫描这些项目:CCCCCCC;确认总价为 7.25 美元。按以下顺序扫描这些项目:ABCD;确认总价为 15.40 美元。
问问题
1916 次
1 回答
4
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
于 2012-04-12T23:47:24.093 回答