大家小时候可能也玩过“组合车牌号里的 4 个数字最终得到 10”的游戏。
组合的方法是在各个数字之间插入四则运算的运算符组成算式,然后计算算式的结果(某些数位之间可以没有运算符,但最少要插入 1 个 运算符)。
例)
1234 → 1 + 2×3 - 4 = 3
9876 → 9×87 + 6 = 789
假设组合算式的计算结果为“原数逆序排列”(比如原数为1234, 要求结果为4321),并且算式的运算按照四则运算的顺序进行
问题
求位于 1000~9999,满足上述条件的数。
(目标时间:10分钟)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
分析
- 插入的运算符号,只可能是
*
乘号(+、-、/或者它们与*的组合,都无法得到4位数) - 因为排除了
/
除号,所以不用考虑除数是0的情况了 - 表达式的值计算,很多语言提供了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);
}
}
}
}
}
}