美文网首页
算法入门篇——四则运算

算法入门篇——四则运算

作者: 秦枫桀 | 来源:发表于2017-08-31 15:32 被阅读0次

    大家小时候可能也玩过“组合车牌号里的 4 个数字最终得到 10”的游戏。

    组合的方法是在各个数字之间插入四则运算的运算符组成算式,然后计算算式的结果(某些数位之间可以没有运算符,但最少要插入 1 个 运算符)。

    例)

    1234 → 1 + 2×3 - 4 = 3         
    9876 → 9×87 + 6 = 789
    
    假设组合算式的计算结果为“原数逆序排列”(比如原数为1234, 要求结果为4321),并且算式的运算按照四则运算的顺序进行

    问题

    求位于 1000~9999,满足上述条件的数。

    (目标时间:10分钟)

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    分析

    1. 插入的运算符号,只可能是*乘号(+、-、/或者它们与*的组合,都无法得到4位数)
    2. 因为排除了/除号,所以不用考虑除数是0的情况了
    3. 表达式的值计算,很多语言提供了eval函数

    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .

    实现

    js版本:

    var op = ["*", ""];
    for (i = 1000; i < 10000; i++){
      var c = String(i);
      for (j = 0; j < op.length; j++){
        for (k = 0; k < op.length; k++){
          for (l = 0; l < op.length; l++){
            val = c.charAt(3) + op[j] + c.charAt(2) + op[k] +
                  c.charAt(1) + op[l] + c.charAt(0);
            if (val.length > 4){ /* 一定要插入1个运算符 */
              if (i == eval(val)){
                console.log(val + " = " + i);
              }
            }
          }
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:算法入门篇——四则运算

          本文链接:https://www.haomeiwen.com/subject/ccvqjxtx.html