a410: 解方程
這篇教學會示範 ZeroJudge 基礎題庫「a410: 解方程」的解題過程。
題目需求
題目會提供六個數字,分別表示一元二次方程式裡的 a、b、c、d、e、f,透過這六個數字,求出 x 和 y 的數值 ( 小數點後方兩位補零 ),如果無解,就輸出「No answer」,如果有無窮解,就輸出「Too many」。
一元二次方程式:
ax+by=c
dx+ey=f
題目連結:a410: 解方程
解答
根據下方一元二次方程式的解法,編輯對應的程式。
使用 map 的方式將六個數字分配給 a、b、c、d、e、f 變數,先用公式計算分母,如果分母不為 0 表示有解,就使用 round 的方式求出小數點兩位的數字,轉換成字串後判斷小數點後方有幾位數,如果只有一位就補一個零,如果沒有小數點就補上「.00」,就能求出 x 和 y。如果分母為 0,分子也為 0 時則有無窮且,若分子不為 0 則無解。
while True:
try:
a, b, c, d, e, f = map(int, input().split(' ')) # 將輸入的六個數字分配給 a、b、c、d、e、f 變數
if (a*e-d*b) != 0: # 如果分母不為 0
x = str(round((c*e-f*b)/(a*e-d*b),2)) # 根據公式算出 x
y = str(round((a*f-d*c)/(a*e-d*b),2)) # 根據公式算出 y
if '.' in x:
if len([i for i in x.split('.')][1])==1:
x = x + '0' # 如果有小數點,但小數點後方只有一位數,補一個零
else:
x = x + '.00' # 如果沒有小數點,補兩個零
if '.' in y:
if len([i for i in y.split('.')][1])==1:
y = y + '0' # 如果有小數點,但小數點後方只有一位數,補一個零
else:
y = y + '.00' # 如果沒有小數點,補兩個零
print(f'x={x}')
print(f'y={y}')
else: # 如果分母為 0
if (c*e-f*b) == 0 and (a*f-d*c) == 0:
print('Too many') # 如果分子為 0,則有無窮解 ( x 和 y 可以是任意數 )
else:
print('No answer') # 分子不為零則無解
except:
break
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~