算法入门篇——四则运算

大家小时候可能也玩过“组合车牌号里的 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);
          }
        }
      }
    }
  }
}

你可能感兴趣的:(算法入门篇——四则运算)