博客
关于我
第三届(2012)蓝桥杯第十题——趣味算式
阅读量:332 次
发布时间:2019-03-04

本文共 1519 字,大约阅读时间需要 5 分钟。

2.2、功能实现分析

为了解决这个问题,我们可以使用递归的方法来生成所有可能的表达式,并检查每个表达式是否等于110。递归的思路是从第一个数字开始,逐步尝试在后面的数字之间插入加号或减号,然后递归处理剩下的数字。

具体来说,我们需要:

  • 递归函数的参数:一个字符串表示当前处理的数字串,一个整数表示当前处理的位置(指针)。
  • 递归逻辑
    • 如果指针到达最后一个位置,检查整个表达式的值是否等于110。
    • 否则,从当前指针开始,尝试将后面的数字用加号连接,并递归处理下一个位置。
    • 如果加号的组合不满足条件,尝试用减号连接,继续递归。
    • 如果两种方法都不行,回溯到上一个位置,继续尝试不同的组合。
  • 2.3、代码实现

    public static void main(String[] args) {    select110("123456789", 0);}private static void select110(String s, int k) {    if (k == 9) {        check(s);    } else {        // 尝试在当前位置后面添加加号        String nextS = s.replace(k + "", k + "+");        select110(nextS, k + 1);        // 尝试在当前位置后面添加减号        String prevS = s.replace(k + "", k + "-");        select110(prevS, k + 1);        // 回溯到上一个位置,继续处理后续数字        select110(s, k + 1);    }}private static void check(String s) {    // 分割所有加号,得到各个部分    String[] parts = s.split("\\+");    int sum = 0;    for (String part : parts) {        // 分割所有减号,得到各个数字        String[] nums = part.split("\\-");        int total = Integer.parseInt(nums[0]);        for (int i = 1; i < nums.length; i++) {            total -= Integer.parseInt(nums[i]);        }        sum += total;    }    if (sum == 110) {        System.out.println(s);    }}

    3、代码解释

  • main函数:调用递归函数select110,传入初始字符串"123456789"和起始指针0。
  • select110函数
    • 终止条件:当指针k到达9时,调用check函数检查表达式是否等于110。
    • 加号尝试:在当前位置后面插入加号,生成新的字符串,递归处理下一个位置。
    • 减号尝试:在当前位置后面插入减号,生成新的字符串,递归处理下一个位置。
    • 回溯处理:如果两种方法都不满足,回溯到上一个位置,继续处理后续数字。
  • check函数
    • 分割加号:将表达式按加号分割,得到各个部分。
    • 计算总和:对于每个部分,再按减号分割,计算其值,并累加到总和中。
    • 检查结果:如果总和等于110,输出该表达式。
  • 通过这种方法,我们可以系统地生成并检查所有可能的表达式,找到所有满足条件的解。

    转载地址:http://wjrq.baihongyu.com/

    你可能感兴趣的文章
    PageHelper实现分页详细版、整合SSM应用
    查看>>
    PageHelper常见问题
    查看>>
    SpringBoot中配置为开发模式,代码修改后不用重新运行
    查看>>
    springboot中pom.xml、application.yml、application.properties
    查看>>
    PageHelper:上手教程(最详细)
    查看>>
    PageOffice如何实现从零开始动态生成图文并茂的Word文档
    查看>>
    PageRank算法
    查看>>
    Paint类(画笔)
    查看>>
    paip. 调试技术打印堆栈 uapi print stack java php python 总结.
    查看>>
    paip.android 手机输入法制造大法
    查看>>
    paip.spring3 mvc servlet的配置以及使用最佳实践
    查看>>
    Palindrome Number leetcode java
    查看>>
    Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
    查看>>
    Palo Alto Networks Expedition 远程命令执行漏洞(CVE-2024-9463)
    查看>>
    Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
    查看>>
    Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
    查看>>
    Springboot中@SuppressWarnings注解详细解析
    查看>>
    Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
    查看>>
    Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
    查看>>
    Panalog 日志审计系统 前台RCE漏洞复现
    查看>>