博客
关于我
第三届(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/

    你可能感兴趣的文章
    photoshop智能参考线
    查看>>
    Reids配置文件redis.conf中文详解
    查看>>
    Photoshop脚本入门
    查看>>
    PHP
    查看>>
    Regular Expression Notes
    查看>>
    PHP $FILES error码对应错误信息
    查看>>
    PHP $_FILES函数详解
    查看>>
    PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
    查看>>
    php &amp; 和 &amp;amp; (主要是url 问题)
    查看>>
    php -- 魔术方法 之 判断属性是否存在或为空:__isset()
    查看>>
    php -- 魔术方法 之 获取属性:__get()
    查看>>
    php -树-二叉树的实现
    查看>>
    PHP -算法-二路归并
    查看>>
    php 2条不一样 的json数据 怎么放在一个json里面_如果你是PHP开发者,请务必了解一下Composer...
    查看>>
    php 360 不记住密码,JavaScript_多种方法实现360浏览器下禁止自动填写用户名密码,目前开发一个项目遇到一个很 - phpStudy...
    查看>>