RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1411032
Accepted
Ерлан Сакан
Ерлан Сакан
Asked:2022-07-18 04:54:08 +0000 UTC2022-07-18 04:54:08 +0000 UTC 2022-07-18 04:54:08 +0000 UTC

帮忙举个例子

  • 772

1.6 波兰符号表达式的经济评估(econom.go,4 分) 波兰符号表达式由变量名(从 a 到 z)、括号和三个运算符符号组成:#、$ 和 @(我们将不定义含义的运营商)。

表达式可以包含重复的子表达式。此类表达式的简约求值意味着重复的子表达式仅求值一次。

需要编写一个程序 econom.go 来计算必须执行的操作数以经济地评估表达式。表中给出了程序操作的例子:

对波兰记数法表达式进行经济评估的程序的一组测试 输出应该是什么

(#($(#xy)($(#ab)(#ab)))(@z($(#ab)(#ab)))) = 6

($xy) = 1

x=0

我尝试了不同的方式,但它不能通过循环和新数组来找到类似的

res1 := strings.Count(str1, "($(#ab)(#ab))")

写在这里

res1 := strings.Count(str1, "строка для поиска")

计数用于条件,如果大于 1,则计为 1

golang
  • 1 1 个回答
  • 41 Views

1 个回答

  • Voted
  1. Best Answer
    Alexander Pavlov
    2022-07-19T00:50:14Z2022-07-19T00:50:14Z
    package main
    
    func main() {
        println(opCount("(#($(#xy)($(#ab)(#ab)))(@z($(#ab)(#ab))))"))
        println(opCount("($xy)"))
        println(opCount("x"))
    }
    
    func opCount(expr string) int {
        expressions := map[string]bool{}
        var openBraces []int
        for i, c := range expr {
            switch c {
            case '(':
                openBraces = append(openBraces, i)
            case ')':
                lastOpenBrace := len(openBraces) - 1
                subExprStart := openBraces[lastOpenBrace]
                subExpr := expr[subExprStart:i]
                expressions[subExpr] = true
                openBraces = openBraces[:lastOpenBrace]
            }
        }
        return len(expressions)
    }
    

    括号大大简化了任务,而在真正的波兰表示法中,不需要括号。如果表达式没有括号,这就是代码的样子

    package main
    
    import "fmt"
    
    func main() {
        println(opCount("#$#xy$#ab#ab@z$#ab#ab"))
        println(opCount("$xy"))
        println(opCount("x"))
    }
    
    type node_t = string
    
    const oper = node_t("oper")
    const expr = node_t("expr")
    
    type node struct {
        t node_t
        v string
    }
    
    func opCount(input string) int {
        expressions := map[string]bool{}
        var stack []node
        for _, c := range input {
            switch c {
            case '$', '#', '@':
                stack = append(stack, node{t: oper, v: fmt.Sprintf("%s", c)})
            default:
                stack = append(stack, node{t: expr, v: fmt.Sprintf("%s", c)})
            }
            for canFold(stack) {
                lastIdx := len(stack) - 1
                operIdx := lastIdx - 2
                folded := node{t: expr, v: stack[operIdx].v + stack[operIdx+1].v + stack[operIdx+2].v}
                expressions[folded.v] = true
                stack[operIdx] = folded
                stack = stack[:operIdx+1]
            }
        }
        return len(expressions)
    }
    
    func canFold(stack []node) bool {
        stackLen := len(stack)
        return stackLen >= 3 && stack[stackLen-3].t == oper && stack[stackLen-2].t == expr && stack[stackLen-1].t == expr
    }
    
    • 2

相关问题

  • windows上的protoc编译错误

  • 递归打印包依赖

  • Golang 算法 XTEA ECB 库“golang.org/x/crypto/xtea”

  • 如何将 IMEI 转换为字节并返回 golang

  • 如何创建文件并将其移动到新目录?

  • go中的函数参数中是否有cv-qualifier的类似物?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5