牛客網NC209794:使徒襲來
題目背景
問題分析
數學建模
- 設三位駕駛員的戰斗力分別為 a, b, c
- 已知條件:a × b × c = n (n為輸入的正整數)
- 目標:求 a + b + c 的最小值
解題思路
根據算術-幾何平均值不等式(AM-GM不等式),對于任意正實數a, b, c,有:
(a + b + c)/3 ≥ (abc)^(1/3)
當且僅當 a = b = c 時,等號成立。
因此,當 a = b = c = n^(1/3) 時,a + b + c 取得最小值 3 × n^(1/3)
代碼實現
#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin>>n;double s=3*pow(n,1/3.0);//使用`pow(n,1/3.0)`計算n的立方根printf("%.3f",s);return 0;
}
代碼解析
-
輸入處理
- 使用
cin
讀取輸入的整數n - 注意n的范圍:n ≤ 10^9
- 使用
-
核心計算
- 使用
pow(n,1/3.0)
計算n的立方根 - 乘以3得到最小和
- 注意使用
1/3.0
而不是1/3
,確保浮點數除法
- 使用
-
輸出處理
- 使用
printf("%.3f",s)
輸出結果 - 保留3位小數
- 使用
時間復雜度分析
- 時間復雜度:O(1)
- 空間復雜度:O(1)
注意事項
- 輸入n的范圍較大(≤10^9),但使用double類型足夠處理
- 計算立方根時使用
1/3.0
而不是1/3
,避免整數除法 - 輸出時注意保留3位小數
示例驗證
輸入:1
輸出:3.000
解釋:當a=b=c=1時,乘積為1,和為3,符合要求
總結
本題通過運用AM-GM不等式,將看似復雜的優化問題轉化為簡單的數學計算。代碼實現簡潔高效,充分體現了數學思維在算法設計中的重要性。