设计一个算法判别一个算术表达式的圆括号是否正确配对 【输入形式】 一个以@为结尾的算术表达式 【输出形式】 若配对,则输出圆括号的对数;否则输出no 【样例输入】(a+b)/(c+d)@ 【样例输出】 2 【样例说明】共有两对括号,输出2 【评分标准】 使用栈相关知识,否则不能得分
时间: 2023-11-30 10:02:19 浏览: 100
好的,这是一个经典的使用栈来判断括号是否匹配的问题。下面是算法的具体实现。
1. 首先定义一个栈,用来存储左括号。
2. 遍历表达式的每一个字符,如果是左括号,就把它压入栈中。
3. 如果是右括号,就从栈中弹出一个左括号。如果栈为空,或者弹出的左括号与当前右括号不匹配,就说明括号不配对,直接输出"no"。
4. 如果遍历完整个表达式后,栈为空,就说明括号全部配对,输出栈中左括号的个数即可。
以下是具体实现的 Python 代码:
```python
def check_parentheses(expr):
stack = []
count = 0
for c in expr:
if c == '(':
stack.append(c)
elif c == ')':
if len(stack) == 0 or stack.pop() != '(':
return "no"
else:
count += 1
if len(stack) != 0:
return "no"
else:
return count
expr = input().strip('@')
print(check_parentheses(expr))
```
例如,对于输入字符串"(a+b)/(c+d)@",程序会输出"2",表示括号全部配对。
阅读全文