-1

考虑一个商店,其中的商品有单位价格,但也有数量价格。例如,苹果可能每个 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 美元。

4

1 回答 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 回答