题目:
假设购买份数在1-5份内,价格为30,
假设购买份数在6-10份内,价格为15,
假设购买份数在11-20份内,价格为10,
假设购买份数在21-50份内,价格为9,
假设购买份数在51-100份内,价格为8,
假设购买份数在101-200份内,价格为7,
假设购买份数在201-500份内,价格为6,
假设购买份数在501-1000份内,价格为5,
假设购买份数在1001-2000份内,价格为4,
假设购买份数在2001-4000份内,价格为3,
假设购买份数在4001-6000份内,价格为2,
6001及以上,价格为1
如:购买6份,价格就等于5*30 +(6-5)*15 = 165
<?php
function search($array, $value, $low = 0, $high = 0){
// 初始化赋初值
if($array[count($array) -1] < $value){
return count($array);
}
if($high == 0 && count($array) > 0){
$high = count($array);
}
if($low <= $high){ // 左边坐标 不能大于 右边坐标
// 找到中间坐标
$mid = floor(($low + $high) / 2);
if($array[$mid] == $value){ // 中间坐标的值刚好等于要查找的值,直接返回坐标
return $mid;
}else if($array[$mid] > $value){ // 中间坐标的值 比 要查找的值 大,进入左边继续查找
return search($array, $value, $low, $mid-1);
}else{ // 反之,中间坐标的值 比 要查找的值 小,进入右边继续查找
return search($array, $value, $mid+1, $high);
}
}
//返回最右区间
return $high + 1;
}
$array = array(0, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 4000, 6000);
$price = array(30, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
// var_dump(search($array, 11));
$n = 6001;
$area = search($array,$n);
echo $area;
$total = 0;
for($i = 0; $i < $area - 1; $i++ ){
$total += ($array[$i+1] - $array[$i]) * $price[$i];
}
var_dump($total);
if($array[$area] != $n){
$total += ($n - $array[$area - 1]) * $price[$area - 1];
}
var_dump($total);
发表评论: