亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何寫一個方法分析出一個正整數的和的所有可能性?

如何寫一個方法分析出一個正整數的和的所有可能性?

慕田峪9158850 2019-02-27 22:18:12
比如一個函數let plus = (num)=>{    //方法}plus(10)返回的結果是這樣:10 = 1+9;10 = 1+2+3+4;10 = 4+6;總之就是返回這個參數所有的可能性。這個plus函數應該怎么寫比較合適?我的想法是用遍歷一個[1,2,3,4,5,6,7,8,9,10]這樣的數組,但是只能遍歷固定的層數,比如說兩層,三層,但是這樣十分不靈活,求指教。
查看完整描述

2 回答

?
SMILET

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種。


查看完整回答
反對 回復 2019-03-04
?
素胚勾勒不出你

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

.

.

.

這樣子的形式。。


查看完整回答
反對 回復 2019-03-04
  • 2 回答
  • 0 關注
  • 503 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號