如何更优雅编码、更优算法 | 阶梯式电费算法 | 非常感谢、请指教~
如何更优雅编码、更优算法 | 阶梯式电费算法 | 非常感谢、请指教~
电费的阶梯式算法#
? 笑:-D~ 倒序进行中,如何更加优雅、使用更少的代码,甚至更优的算法呢?
常常会见到这种场景:
举个栗子,深圳为了推进市民节约用电推出了这样一个用电收费政策,电量使用阶梯式递增的收费计算方式,简单而言、用电越多平均的每度电越贵。(假设用户的每电量为整数,小于 1 度电则应缴费为 0 元)
计算电费的剃度表如下所示:
耗电范围 (°) | 电费计算 (1 元 /°) |
---|---|
1<=x <=10 |
1 |
11<=x <=20 |
1.2 |
21<=x <=50 |
1.4 |
51<=x <=100 |
1.8 |
101<=x <=300 |
2.4 |
301<=x |
5 |
- 一般的算法如下。感谢更优的代码方案~
/**
* 根据用电的度数计算电费
* @param int $number 用电度数
* @return float 电费
*/
function calculate(int $number): float
{
if ($number <= 0) {
return 0;
}
switch ($number) {
case 1 <= $number && $number <= 10:
return $number * 1;
break;
case 11 <= $number && $number <= 20:
return ($number - 10) * 1.2 + calculate(10);
break;
case 21 <= $number && $number <= 50:
return ($number - 20) * 1.4 + calculate(20);
break;
case 51 <= $number && $number <= 100:
return ($number - 50) * 1.8 + calculate(50);
break;
case 101 <= $number && $number <= 300:
return ($number - 100) * 2.2 + calculate(100);
break;
default:
return ($number - 300) * 5 + calculate(300);
break;
}
}
不定维数组的排序 (键名)#
如何优雅高效地将一个不定维数组按照键名排序。
// 如下为不定维数组变量
$data = [
'amount' => 100,
'quota' => 100000000,
'applicant' => [
'name' => 'alicfeng',
'sex' => 'M',
'age' => 21,
'certificate' => [
'number' => '441701995********',
'start_date' => '20080808',
'end_date' => '20280808'
]
],
'family' => [
'number' => 5,
'feel' => 'nice'
]
];
本作品采用《CC 协议》,转载必须注明作者和本文链接
价值源于技术,贡献源于分享 | 笔记分享归档
No matter where I am, I will reply you immediately when I see the email.
My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d
个人比较喜欢分享,若有不对的地方非常感谢指出
相互学习、共同进步~
推荐文章: