a006: 一元二次方程式
這篇教學會示範 ZeroJudge 基礎題庫「a006: 一元二次方程式」的解題過程。
題目需求
求一元二次方程式 ax2+bx+c=0 的根 ( 測試時會提供以空白隔開的 a, b, c 三個整數 )。
題目連結:a006: 一元二次方程式
解答
參考維基百科「一元二次方程式」,可以透過下列的公式,得到 x1 和 x2 的數值。
首先使用 map 拆分出題目給予的 a、b、c 三個數字,由於 a 為分母不能為 0,所以先判斷 a 是否為 0,如果 a 不為 0 才開始套用公式,套用公式後會再繼續判斷開根號內的數字,因為開根號內的數字必須大於等於 0,所以如果小於 0 也會回傳 No real root 的文字,除此之外,只要帶入公式都能求出 x1 和 x2 的數值。
a,b,c = map(int, input().split(' ')) # 拆分輸入的字串,轉換成數字提供給變數 a、b、c
if a !=0: # 如果 a 不等於 0
r = b**2 - 4*a*c # 計算開根號內的數值
if r>0: # 如果開根號內的數值大於 0
x1 = int((b*-1 + r**0.5)/(2*a)) # 套用公式求出 x1
x2 = int((b*-1 - r**0.5)/(2*a)) # 套用公式求出 x2
if x1>x2: # 根據題目輸出結果
print(f'Two different roots x1={x1} , x2={x2}')
else:
print(f'Two different roots x1={x2} , x2={x1}')
elif r == 0:
x = int((b*-1 + r**0.5)/(2*a))
print(f'Two same roots x={x}') # 根據題目輸出結果
else: # 如果開根號內的數值小於 0
print('No real root')
else: # 如果 a 等於 0
print('No real root')
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~