這道題其實考察的是對字符串的處理。
顯然我們要將方程化爲ax2+bx+c=0的形式,因此可以找出式子中所有x2、x的係數以及c。但是題目的輸入是一個完整的字符串,如果暴力遍歷的話會很麻煩,於是就想到把式子中的x2, x, c分開來。這用python其實很方便(其他語言不清楚,C/C++可能暴力會更簡單)。
用python 40+行就能解決這道題。
def getNumber(string, str_to_remove):
"""
這個函數用來刪除string的後綴如'x^2'/'x',然後將數字部分返回
刪除字符串可以用strip()
也可以用replace()
這裏之所以還單獨寫一個函數,是因爲可能有這種情:'x^2'
這種情況刪除後綴後會變成空串'',到時int()會出錯
"""
if string == str_to_remove:
return 1
if len(string) == len(str_to_remove)+1:
if string[0] == '-':
return -1
return int(string.rstrip(str_to_remove))
return int(string.rstrip(str_to_remove))
while True:
try:
line = input().strip().split('=')
left = line[0].replace('+', ' ').replace('-', ' -').split()
right = line[1].replace('+', ' ').replace('-', ' -').split()
a, b, c = [], [], []
for string in left:
if 'x^2' in string:
a.append(getNumber(string, 'x^2'))
elif 'x' in string:
b.append(getNumber(string, 'x'))
else:
c.append(int(string))
for string in right:
if 'x^2' in string:
a.append(-getNumber(string, 'x^2'))
elif 'x' in string:
b.append(-getNumber(string, 'x'))
else:
c.append(-int(string))
a, b, c = sum(a), sum(b), sum(c)
if a == 0:
print("%.2f %.2f" %(-c/b, -c/b))
elif b**2 - 4*a*c < 0:
print("No Solution")
else:
tmp = (b**2 - 4*a*c)**0.5
ans = sorted([(-b+tmp)/(2*a), (-b-tmp)/(2*a)])
print("%.2f %.2f" %(ans[0], ans[1]))
except:
break