題目概要:
求出x使得體積可以最大、最小。
解題方向:
每組測資皆有2個Input,L、W。
由上圖我們可以推導盒子體積(V)=(L-2*x) * (W-2*x) * x
1.盒子體積最大
使用微分的方式去求出極大/極小值。把體積式子微分,微分後為開口向上的二次函數,令微分後的結果等於0,則求出來為極小值,所以帶回原體積式子所得到的體積會是最大。
V'=L*W - 4*(L+W)*x + 12*x^2
L*W - 4*(L+W)*x + 12*x^2=0
將L、W帶入。再用-b+sqrt(b*b-4*a*c)/2*a或-b-sqrt(b*b-4*a*c)/2*a求出x即可。
Ps.使用-b-sqrt(b*b-4*a*c)/2*a即可,因為-b-sqrt(b*b-4*a*c)/2*a所求得體積會比-b+sqrt(b*b-4*a*c)/2*a還要小。
2.盒子體積會小
當x為0時體積會最小。當x=L/2或x=W/2時體積也會是最小。
注意事項:
1.瘋狂程設練習題中Input沒有包含float的測資(但是題目是有要求的),所以在瘋狂程設練習題中使用int是會過的,不過還是要使用float的輸入,否則在Uva或者其他平台可能會無法通過測資。
2.網路上有些資料會看到要加1e-9以湊足被省去的小數點(C語言),我只有打java的版本,發現是可以不用加上1e-9的,但C語言我沒有特別去試,所以我也不確定是否要加1e-9 Uva才會過。
3.java使用System.out.printf輸出時換行在Uva只需要\n即可,而在瘋狂程設需要\r\n。
程式碼:
留言列表