销售点扫描API

时间:2012-04-12 23:37:24

标签: algorithm data-structures

  

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

1 个答案:

答案 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