这道题其实考察的是对字符串的处理。
显然我们要将方程化为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