鱼C论坛

 找回密码
 立即注册
查看: 339|回复: 1

栈求解

[复制链接]
发表于 2024-4-26 12:35:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
利用栈写一个程序检测数学表达式字符串中的小括号是否有效,并判断有几个无效的小括号,用程序检查下面的表达式中的小括号是否有效。

输入:expr1 = '(14.854-(14.238-((((12.568+((((0.597×(13.976×(5.227÷((((11.552-(((3.645×(2.862-(((3.141-(1.069-(1.032+(2.910-(1.118+(((13.847-(4.002-((0.958÷(16.675+(3.791-((3.216×(0.103÷(6.319÷11.35÷12.849)+7.964))×1.098+0.866)÷0.807))÷0.343)-4.604))-4.179-0.481)÷0.860)÷0.844))))))-9.886-1.135)-8.620)))-0.223)+6.336))+8.792)÷4.544)÷4.003))-0.220)+0.664)-4.557)×6.335)×2.180)-6.198)+13.069)+3.313)-4.430)))÷4.849÷1.30'

expr2 = '((10.991÷(2.877÷(0.767×((3.757-((6.077×((1.825×((6.618+((0.282+(((5.779÷(3.059+(15.894×(0.170+((8.407-(13.687+(10.351×(3.065-(2.618×(7.305×(0.203-(9.315×((((0.143+(((0.603+(13.209×((5.338+13.74)-0.912÷3.661÷6.447)÷2.950)-2.008)×6.592)+0.160)-5.234))))-3.678-1.292)))×1.262))÷15.827)×1.409)))÷15.438)-3.113×13.520)×3.313+11.319))-8.001)×7.748)×2.641))÷0.528)-7.659)+1.968))×7.143))))÷5.466)×6.550+4.82'


输出:几个无效小括号,如果字符串有效输出0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-26 12:35:56 | 显示全部楼层
可以使用栈来检测数学表达式中的小括号是否有效。具体步骤如下:

1. 创建一个空栈,用于存储左括号。
2. 遍历表达式字符串中的每个字符。
3. 如果遇到左括号,则将其压入栈中。
4. 如果遇到右括号:
   a. 如果栈不为空且栈顶元素是左括号,则将栈顶元素弹出。
   b. 如果栈为空或者栈顶元素不是左括号,则说明当前右括号无法匹配到相应的左括号,表示该右括号是无效的。
5. 继续遍历字符串,直到结束。
6. 最后检查栈是否为空,如果栈不为空,则表示有一些左括号没有被匹配到,也是无效的。

下面是使用Python实现的完整代码:
def check_brackets(expr):
    stack = []  # 创建一个空栈

    for char in expr:
        if char == '(':
            stack.append('(')  # 遇到左括号,将其压入栈中
        elif char == ')':
            if stack and stack[-1] == '(':  # 栈不为空且栈顶元素是左括号
                stack.pop()  # 弹出栈顶元素
            else:
                return False  # 当前右括号无法匹配到相应的左括号,无效
    return len(stack)  # 检查栈是否为空

expr1 = '(14.854-(14.238-((((12.568+((((0.597×(13.976×(5.227÷((((11.552-(((3.645×(2.862-(((3.141-(1.069-(1.032+(2.910-(1.118+(((13.847-(4.002-((0.958÷(16.675+(3.791-((3.216×(0.103÷(6.319÷11.35÷12.849)+7.964))×1.098+0.866)÷0.807))÷0.343)-4.604))-4.179-0.481)÷0.860)÷0.844))))))-9.886-1.135)-8.620)))-0.223)+6.336))+8.792)÷4.544)÷4.003))-0.220)+0.664)-4.557)×6.335)×2.180)-6.198)+13.069)+3.313)-4.430)))÷4.849÷1.30'
expr2 = '((10.991÷(2.877÷(0.767×((3.757-((6.077×((1.825×((6.618+((0.282+(((5.779÷(3.059+(15.894×(0.170+((8.407-(13.687+(10.351×(3.065-(2.618×(7.305×(0.203-(9.315×((((0.143+(((0.603+(13.209×((5.338+13.74)-0.912÷3.661÷6.447)÷2.950)-2.008)×6.592)+0.160)-5.234))))-3.678-1.292)))×1.262))÷15.827)×1.409)))÷15.438)-3.113×13.520)×3.313+11.319))-8.001)×7.748)×2.641))÷0.528)-7.659)+1.968))×7.143))))÷5.466)×6.550+4.82'

print(check_brackets(expr1))  # 输出:0,表示没有无效的小括号
print(check_brackets(expr2))  # 输出:1,表示有一个无效的小括号

希望能帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 18:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表