zerojudge a006 程式碼
#include<iostream>
#include<cmath>
using namespace std;
int main (){
int a,b,c,delta,ans1,ans2,temp1,temp2;
cin>>a>>b>>c;
delta=b*b-4*a*c;
ans1=(-b+sqrt(b*b-4*a*c))/(2*a);
ans2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(delta>0) {
if(a>0)cout<<"Two different roots x1="<<ans1<<" , x2="<<ans2<<endl;
else if (a<0) cout<<"Two different root x1="<<ans2<<" , x2="<<ans1<<endl;
}
else if (delta==0) cout<<"Two same roots x="<<ans1<<endl;
else cout<<"No real root"<<endl;
return 0;
}
解說
引入標頭檔與命名空間:
#include<iostream>
#include<cmath>
using namespace std;
引入 iostream
來進行輸入輸出操作。
引入 cmath
來使用數學函數,如 sqrt
。
使用 std
命名空間,方便後續程式碼的書寫
主程式開始:
int main() {
定義主函式 main
。
變數宣告與輸入:
int a, b, c, delta, ans1, ans2;
cin >> a >> b >> c;
宣告整數變數 a
, b
, c
存放輸入的係數,delta
存放判別式,ans1
, ans2
存放計算出的根。
使用 cin
從標準輸入讀入 a
, b
, c
的值。
計算判別式:
delta = b * b - 4 * a * c;
- 計算判別式
delta
。
計算根:
ans1 = (-b + sqrt(delta)) / (2 * a);
ans2 = (-b - sqrt(delta)) / (2 * a);
- 使用判別式
delta
計算兩個根ans1
和ans2
。
判斷並輸出結果:
if (delta > 0) {
if (ans1 > ans2)
cout << "Two different roots x1=" << ans1 << " , x2=" << ans2 << endl;
else
cout << "Two different roots x1=" << ans2 << " , x2=" << ans1 << endl;
} else if (delta == 0) {
cout << "Two same roots x=" << ans1 << endl;
} else {
cout << "No real root" << endl;
}
判斷 delta
的值來決定輸出內容:
- 若
delta > 0
,表示有兩個不同的實根,進一步比較ans1
和ans2
,較大者在前輸出。 - 若
delta == 0
,表示有兩個相同的實根,輸出相同的根。 - 若
delta < 0
,表示無實根,輸出 “No real root”。
結束主程式:
return 0;
主程式結束,返回 0
。
這段程式碼完成了對一元二次方程式根的計算和判斷,並根據不同情況輸出相應的結果。
這段程式碼在計算一元二次方程式的根時,考慮了判別式的不同值來決定輸出的結果。從時間複雜度和其他指標來看,我們可以進行以下評價:
時間複雜度
這段程式碼的時間複雜度主要來自於數學運算部分,包括計算判別式和平方根。這些操作都是常數時間操作(O(1))。因此,整段程式碼的時間複雜度為 O(1)。
空間複雜度
這段程式碼只使用了幾個整數變數來存儲輸入值和中間計算結果,空間複雜度也是 O(1)。
可讀性與正確性
這段程式碼的結構清晰,易於理解和維護。