题目:
假设购买份数在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);
发表评论: