第一次试过通过分类的方式,分成几种模式处理,结果发现越弄越麻烦,最后放弃了改用模拟栈实现,发现很自然也很正确。
Python语言的可读性很高,简单说一下思路吧: 数字和操作符列表模拟栈,从左到右扫描表达式,遇到 'x' (这个要注意! 我竟然看成了 '*' ,第一次只得了40分emmmm)或 '/' 就取出俩数字做运算,然后把结果放回去。
然后把操作符列表里的 '-' 对应的数字变成负数,最后直接求和。
这个题不难,细心一下,只要测试案例通过了就没什么问题了。
n = int(input())
count = n
while count:
count -= 1
data_s = input()
operator = []
number, num1, num2 = [], 0, 0
for i,data in enumerate(data_s):
if(i%2):
operator.append(data)
else:
number.append(int(data)) # 入栈
if operator:
if(operator[-1] == 'x'):
num1, num2 = number.pop(), number.pop()
number.append(num1*num2)
operator.pop()
elif(operator[-1] == '/'):
num1, num2 = number.pop(), number.pop()
number.append(num2//num1)
operator.pop()
for i, opt in enumerate(operator):
if(opt == '-'):
number[i+1] = -number[i+1]
if(sum(number) == 24):
print("Yes")
else:
print("No")