如何更優雅編碼、更優演算法 | 階梯式電費演算法 | 非常感謝、請指教~
電費的階梯式演算法
?笑:-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
個人比較喜歡分享,若有不對的地方非常感謝指出
相互學習、共同進步~