RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1607004
Accepted
AMIACK
AMIACK
Asked:2025-02-16 06:02:07 +0000 UTC2025-02-16 06:02:07 +0000 UTC 2025-02-16 06:02:07 +0000 UTC

计算机科学统一国家考试的一项艰巨任务

  • 772

我无法正确解决计算机科学统一国家考试中的问题,老师们拒绝帮助,我不明白为什么解决方案是错误的,我将在下面给出我的代码和问题陈述,请解释我错在哪里,提前谢谢! (与 KompEGE 一起完成的任务,我将文件附加到下面的任务中)

#17685 重拍 04.07.24(等级:棺材)

文本文件由十进制数字、“+”和“*”符号(加法和乘法)组成。确定连续序列中的最大字符数,该序列是具有非负整数(无符号)的有效算术表达式,其值为零。在这个表达式中,没有两个算术运算符号彼此相邻;运算顺序由数学规则决定。数字符号中没有不重要的(前导)零。 24.txt

答案 169

请注明您答案的字符数。

s = open("24_17641.txt").read()
while "**" in s or "++" in s or "*+" in s or "+*" in s:
    if "**" in s:
        s = s.replace("**", "* *")
    if "++" in s:
        s = s.replace("++", "+ +")
    if "*+" in s:
        s = s.replace("*+", "* +")
    if "+*" in s:
        s = s.replace("+*", "+ *")
s = s.split()
print(s)
a = [i[1:-1] for i in s if i != "+" and i != "*"]
a = a[1:-1]
mx = 0
for i in a:
    if eval(i) == 0:
        mx = max(mx, len(i))
print(mx)
python
  • 2 2 个回答
  • 237 Views

2 个回答

  • Voted
  1. Best Answer
    Stanislav Volodarskiy
    2025-02-16T06:30:08Z2025-02-16T06:30:08Z

    我用表达式调用了你的解决方案0*0+1*1,得到了答案0。表达式的正确答案是 30*0。算法错误。

    解决方案之一:

    读取文件,删除末尾的换行符和文本末尾和开头的操作符号:f.read().strip('\n+*')。

    将文件拆分为不包含连续多个运算符号的子字符串:re.split('[+*]{2,}', text)。

    将每个子字符串分解为以下项:e.split('+')。

    比较每一项与零:'*0*' in '*' + term + '*'。

    将零项(和非零项)收集到组中:itertools.groupby。

    从每一组中恢复表达式:'+'.join(g)。

    如果在该组之前有另一个以 结尾的组,则0将该组的长度加 2:12340+0→ 0+0。

    从所有零和的组中,选择最长的一个:max_length = max(max_length, length)。

    import itertools
    import re
    
    
    def is_zero(term):
        return '*0*' in '*' + term + '*'
    
    
    with open("24_17641.txt") as f:
        text = f.read().strip('\n+*')
    max_length = 0
    for e in re.split('[+*]{2,}', text):
        terms = [('*0*' in '*' + term + '*', term) for term in e.split('+')]
        groups = [
            (k, '+'.join(g))
            for k, g in itertools.groupby(e.split('+'), key=is_zero)
        ]
        for i, (k, expr) in enumerate(groups):
            if k:
                length = len(expr)
                if i > 0 and groups[i - 1][1].endswith('0'):
                    length += 2
                max_length = max(max_length, length)
    print(max_length)
    
    • 5
  2. Intelligent Shade of Blue
    2025-02-16T07:01:21Z2025-02-16T07:01:21Z

    步骤 1:将序列分解为有效的算术表达式:

    import re
    
    with open("9rWpROaef.txt") as fp:
        exprs = re.split("[*+]{2,}", fp.read())
    

    第 2 步:将每个实数表达式分成其算术加法分量(使用 + 号)。每组都是数字和乘号 (*) 的组合。

    max_len = 0
    for expr in exprs:
        mults = expr.split('+')
    

    步骤 3:将每个乘法组分成单独的数字(使用 * 符号)。

        non_zero = False
        for mult in mults:
            nums = mult.split('*')
    

    步骤 4:检查是否至少有一个数字为 0。

            if '0' not in nums:
                non_zero = True
                break
    

    步骤 5:追踪最长的线。

        if not non_zero:
            max_len = max(max_len, len(expr))
    
    步骤6:打印长度。
    print(max_len)
    

    更新:我没有意识到零序列可以是非零序列的子序列。因此需要纠正步骤 4 来检查这一点。

    此外,可以从非零数字中“窃取”最后的零。例如,在12340+567*0最大序列中,零序列为0+567*0。

    因此修正后的代码如下:

    #!/usr/bin/env python3
    import re
    
    with open("9rWpROaef.txt") as fp:
        exprs = re.split("[*+]{2,}", fp.read())
    
    max_len = 0
    for expr in exprs:
        mults = expr.split('+')
    
        zeros = []
        for mult in mults:
            if "*0*" not in '*' + mult + '*':
                max_len = max(max_len, len("+".join(zeros)))
    
                # steal trailing '0' from prior non-zero mult
                zeros = ["0"] if bool(mult.endswith('0')) else []
    
            else: zeros += [mult]
    
        max_len = max(max_len, len("+".join(zeros)))
    
    print(max_len)
    

    更新:可以进行一些优化,但会降低可读性:

    #!/usr/bin/env python3
    import re
    
    with open("9rWpROaef.txt") as fp:
        exprs = re.split("[*+]{2,}", fp.read())
    
    max_len = 0
    for expr in exprs:
        mults = expr.split('+')
    
        new_len = 0
        for mult in mults:
            if "*0*" in '*' + mult + '*':
                new_len += len(mult) + bool(new_len) # bool(new_len) for the '+' sign
            else:
                max_len = max(max_len, new_len)
                new_len = bool(mult.endswith('0')) # steal trailing '0' from prior non-zero mult
    
        max_len = max(max_len, new_len)
    
    print(max_len)
    
    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

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