2 回答
TA贡献1796条经验 获得超4个赞
哎,好吧。Mask同学看出了问题,的确,那天写答案已经很晚就没有做去重。还是被人发现了。。。?
现在补上。
const num = 10
const statck = []
const obj = {}
const pow = num => num ** num
function reduce(upper, before = []) {
for (let i = 1; i <= upper / 2; i++) {
const diff = upper - i
const arr = [i, diff, ...before]
const id = arr.map(pow).reduce((pre, cur) => pre + cur)
if (!obj[id]) {
statck.push(arr)
obj[id] = 1
}
if (diff > 1) reduce(diff, [...before, i])
}
}
reduce(num)
const result = statck.map(a => '10 = ' + a.join(' + '))
console.log(result)
一共41种。
TA贡献1827条经验 获得超9个赞
我现在想到的最快的方法应该是找到Z=1+2+3+...+X。。然后把1,2,3,...,X,做一个遍历和的组合,去掉有重复数字的,就应该是你想要的答案了。。比如10=1+2+3+4。。然后你就找到1,2,3,4的遍历和的组合。。
1. 1,2=3 3+4+3 (重复数字)
2. 1,3=4 2+4+4 (重复数字)
3. 1,4=5 2+3+5
4. 1,2,3=6 4+6
5. 1,2,4=7 3+7
6. 1,3,4=8 2+8
8. 2,3=5 1+4+5
9. 2,4=6 1+3+6
10. 2,3,4=9 1+9
.
.
.
这样子的形式。。
添加回答
举报