RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1597470
Accepted
weldoy
weldoy
Asked:2024-10-22 18:09:10 +0000 UTC2024-10-22 18:09:10 +0000 UTC 2024-10-22 18:09:10 +0000 UTC

解释问题的解决方案。统一国家考试 23 [已关闭]

  • 772
关闭。这个问题需要澄清或者补充细节。目前不接受对此问题的答复。

想要改进这个问题吗?通过编辑这篇文章添加更多详细信息并澄清问题。

2 天前关闭。

改进问题

TP4 执行者转换屏幕上的数字。

表演者有两支队伍,并分配了编号:

  1. 添加 1
  2. 乘以 2

也就是说,第一个命令将屏幕上的数字加 1,第二个命令将其乘以 2。

TP4 执行器的程序是一系列命令。

有多少个程序将原来的数字2转换为数字35,但计算路径中包含数字15而不包含数字31?

计算轨迹是所有程序命令执行的结果序列。例如,对于初始编号为 7 的程序 212,轨迹将由数字 14、15、30 组成。

def f(x, y):
    if x > y or x == 31:
        return 0
    elif x == y:
        return 1
    else:
        return f(x + 1, y) + f(x * 2, y)

print(f(2, 15) * f(15, 35))
python
  • 1 1 个回答
  • 67 Views

1 个回答

  • Voted
  1. Best Answer
    mrgervant
    2024-10-22T20:40:06Z2024-10-22T20:40:06Z

    在这个任务中,我们必须使用某些条件遍历树(作为数据结构)。该任务有更正式的解释(示例),但我将尝试使用清晰、简化的示例进行解释 - 只需减少限制数量。

    我们以条件为例:将 1 转换为 6,其中强制包含 3,不包含 4。

    预期结果是“存在多少个程序”。以最简单的方式,这是成功地将原始数字转换为最终数字的“加 1”和“乘以 2”操作的有效组合的数量。

    我们如何计算组合?让我们创建一个递归函数,它将以两种方式继续进行更改x- 加法和乘法:

    def f(x, y):
        if x > y:
            # если `x` превысил `y`, значит комбинация вычислений оказалась неверна
            # не считаем комбинацию в результат (+0)
            return 0
        elif x == y:
            # если `x` равен `y`, значит ветка древа подходит под условия
            # считаем комбинацию в результат (+1)
            return 1
        else:
            # иначе можно продолжать создавать комбинации из 2х способов
            return f(x + 1, y) + f(x * 2, y)
    

    这里我们可以确保满足“计算轨迹包含数字”的条件——为此,我们计算在计算过程中首先必然导致我们得出数字3的组合的数量。

    简单来说,就是带参数调用指定的函数(1, 3):

    1 узел:                        (1, 3)
    
    2 узел:          (2, 3)           |          (2, 3)
    
    3 узел: (3, 3) -> 1 | (4, 3) -> 0 | (3, 3) -> 1 | (4, 3) -> 0
    
    Всего подходящих комбинаций: 2
    

    也就是说,总共有 2 种组合将成功地将我们从第一名带到第三名:

    +1, +1和*2, +1。

    最后,他们按照自己的分支给予return 1,不适合的则相反return 0。所有这些值都被加到函数的最终结果 - 2中。

    接下来,我们可以使用相同的函数来统计从 3 到最终数字 6 的组合数量,然后将获得的第一个数字与第二个数字相乘(乘法规则)。这将产生一个必须经过数字 3 的组合的数字:

    1 узел:                                 (3, 6)
    
    2 узел:                   (4, 6) -> 0      |        (6, 6) -> 1
    
    3 узел:           (5, 6)     |    (8, 6) -> 0
    
    4 узел: (6, 6) -> 1 | (10, 6) -> 0 
    
    Всего подходящих комбинаций: 2
    

    但是,我们需要从后续路径中排除通过数字 4 进行的计算,为此,我们将添加该函数,以便x = 4该函数也返回 0,即,它不认为该树枝有效:

    def f(x, y):
        if x > y or x == 4:
            return 0
        elif x == y:
            return 1
        else:
            return f(x + 1, y) + f(x * 2, y)
    

    同时,如果您使用(1, 3)计算第一部分中的参数调用新函数,那么什么都不会改变,因为因为数量限制为3,x = 4这同时也是一个条件x > y——之前是有限制的。

    (3, 6)但通过计算第二部分的参数,这可以消除不适当的组合:

    1 узел:          (3, 6)
    
    2 узел: (4, 6) -> 0 | (6, 6) -> 1
    
    Всего подходящих комбинаций: 1
    

    也就是说,从 3 号到 6 号,如果不进入 4 号,只有 1 个组合可以成功:*2

    如上所述,根据乘法规则,我们将接收到的 2 个数字(2 和 1)相乘以获得所有组合(这就是调用 as 时发生的情况f(1, 3) * f(3, 6))。

    结果,我们得到了答案2——这就是“加1”和“乘2”动作的组合有多少种,可以将1转化为6,而在计算过程中必然得到3,但不会得到4。

    这些组合看起来像:

    1 траектория: 112
    (1 + 1 = 2 --> 2 + 1 = 3 --> 3 * 2 = 6)
    
    2 траектория: 212
    (1 * 2 = 2 --> 2 + 1 = 3 --> 3 * 2 = 6)
    

    如果我们从原始问题中获取条件,树会更大,并且更难以将其保留在脑海中/绘制它。但原理是一样的。

    为了更好地理解,您可以替换问题条件。例如,有效的程序操作为“add 1”和“add 2”。然后我们只需要在函数中替换f(x + 1, y) + f(x * 2, y)为f(x + 1, y) + f(x + 2, y)。结果,递归函数将计算新动作的组合树。

    • 4

相关问题

  • 是否可以以某种方式自定义 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