实在不知道为什么自己不能写题解 (因为这种思路比较新颖,所以皮一下)
主要思路是运用python中的str.find(),str.replace()和eval(),代码思是二分搜索,答案的分为是-1e5~1e5(猜的)
# x:读入字符串并将a=b转为a-(b)的形式
x = ' ' + input().replace('=', '-(') + ')'
# 找到代码中的唯一自变量
bian = ''
i = 0
for i in range(len(x)):
if 'a' <= x[i] <= 'z':
break
while i < len(x) and 'a' <= x[i] <= 'z':
bian += x[i]
i += 1
# 将唯一自变量换为x
x = x.replace(bian, 'x')
# 若变量前为常数,应该多加'*'
num = 1
while num < len(x):
num = x.find('x', num)
if '0' <= x[num - 1] <= '9' and x[num] == 'x':
x = x[:num] + '*' + x[num:]
num += 2
elif num == -1:
break
else:
num += 1
# 在[zuo,you]区间二分搜索答案
zuo, you = -1e5, 1e5
ans = 0
# 因为是单调变化的,所以判断下是增加还是减少
if eval(x.replace('x', str(zuo))) > 0:
i = -1
else:
i = 1
while zuo + 0.00001 < you:
ans = (zuo + you) / 2
da = eval(x.replace('x', str(ans))) * i
if da == 0:
break
elif da > 0:
you = ans - 0.0001
else:
zuo = ans + 0.0001
print(f'{bian}={ans:.3f}')
python 时间大概25ms一个样例左右