大家小時(shí)候可能也玩過“組合車牌號(hào)里的 4 個(gè)數(shù)字最終得到 10”的游戲诲锹。
組合的方法是在各個(gè)數(shù)字之間插入四則運(yùn)算的運(yùn)算符組成算式迷扇,然后計(jì)算算式的結(jié)果(某些數(shù)位之間可以沒有運(yùn)算符,但最少要插入 1 個(gè) 運(yùn)算符)磨隘。
例)
1234 → 1 + 2×3 - 4 = 3
9876 → 9×87 + 6 = 789
假設(shè)組合算式的計(jì)算結(jié)果為“原數(shù)逆序排列”(比如原數(shù)為1234, 要求結(jié)果為4321)绒疗,并且算式的運(yùn)算按照四則運(yùn)算的順序進(jìn)行
問題
求位于 1000~9999,滿足上述條件的數(shù)碍彭。
(目標(biāo)時(shí)間:10分鐘)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
分析
- 插入的運(yùn)算符號(hào),只可能是
*
乘號(hào)(+悼潭、-硕旗、/或者它們與*的組合,都無法得到4位數(shù)) - 因?yàn)榕懦?code>/除號(hào)女责,所以不用考慮除數(shù)是0的情況了
- 表達(dá)式的值計(jì)算漆枚,很多語言提供了eval函數(shù)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
實(shí)現(xiàn)
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個(gè)運(yùn)算符 */
if (i == eval(val)){
console.log(val + " = " + i);
}
}
}
}
}
}