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
微信扫码关注
抖音扫码关注