第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

求解下面的程序是哪寫錯(cuò)了嗎?

求解下面的程序是哪寫錯(cuò)了嗎?

素胚勾勒不出你 2019-03-20 15:11:29
var cnt = 0;function change(target, coins, usable) {    coin = coins.shift();    if(coins.length==0) {        if(target/coin<=usable) {            cnt += 1;        }    }    else{        for(let i=0; i<=target/coin; i++) {            change(target-coin*i, coins, usable-i);        }    }}change(1000, [500, 100, 50, 10], 15);console.log(cnt);算法題目鏈接:https://max.book118.com/html/...。題目:當(dāng)下,坐公交或者地鐵時(shí)大部分人都是刷卡的。不過,時(shí)至今日還在用現(xiàn)金支付的人還是比想象的多。本題我們以安置在公交上的零錢兌換機(jī)為背景。這個(gè)機(jī)器可以用紙幣兌換到 10 日元、50 日元、100 日元和 500 日元硬幣的組合,且每種硬幣的數(shù)量都足夠多(因?yàn)楣唤邮艿淖钚☆~度為 10 日元,所以不提供 1 日元和 5 日元的硬幣)。兌換時(shí),允許機(jī)器兌換出本次支付時(shí)用不到的硬幣。此外,因?yàn)樵诔俗粫r(shí),如果兌換出了大量的零錢會(huì)比較不便,所以只允許機(jī)器最多兌換出 15 枚硬幣。譬如用 1000 日元紙幣兌換時(shí),就不能兌換出“100 枚 10 日元硬幣”的組合。求兌換 1000 日元紙幣時(shí)會(huì)出現(xiàn)多少種組合?注意,不計(jì)硬幣兌出的先后順序。
查看完整描述

4 回答

?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

var cnt = 0;

function change(target, coins, usable) {

    let coin = coins.shift();//應(yīng)該要給coin聲明變量,不聲明會(huì)默認(rèn)全局變量則導(dǎo)致下面for循環(huán)的值跟著變動(dòng),就一直不滿足target/coin<=usable的條件.

    if(coins.length==0) {

        if(target/coin<=usable) {

            cnt += 1;

        }

    }

    else{

        for(let i=0; i<=target/coin; i++) {

            change(target-coin*i, coins.slice(), usable-i);//這里應(yīng)該復(fù)制一份coins,避免遞歸時(shí)候使用shift把數(shù)據(jù)給修改了.

        }

    }

}

change(1000, [500, 100, 50, 10], 15);

console.log(cnt);


查看完整回答
反對(duì) 回復(fù) 2019-04-04
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

coins.shift() usable不知道你些內(nèi)容是怎么定義的?


查看完整回答
反對(duì) 回復(fù) 2019-04-04
?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

既然是算法題,就應(yīng)該先考慮算法

其實(shí)這個(gè)問題轉(zhuǎn)化后就是求 有4個(gè)不同的數(shù)字在數(shù)組A中,抽取每個(gè)數(shù)字(允許多次抽取)總抽取數(shù)位N(N<=15),使得其總和等于X,問有多少可能(最少可能是0個(gè),即不能匹配抽?。?/p>

當(dāng)然,因?yàn)檫@個(gè)題中X和A已經(jīng)確定了,所以可以減少搜索規(guī)模。

前面給出了一種方法,我想用另外一種方法求解(位運(yùn)算)

根據(jù)前面的一些條件,其實(shí)可能可以映射到一個(gè)2bit(最大值為3)+4bit(最大值為15)+4bit(最大值為15)+4bit(最大值為15) 是數(shù)字上

其中2bit對(duì)應(yīng)于500的數(shù)量,因?yàn)閯偤玫扔?的可能是唯一的,所以可以退化為1bit+4bit+4bit+4bit的數(shù)字上(一共13bit)

且各段數(shù)據(jù)總和小于等于15,第二段也要小于等于10,所以遍歷符合條件的數(shù)字,就可以獲取最終結(jié)果了。下面是實(shí)現(xiàn)(這個(gè)題對(duì)這個(gè)來說不是最優(yōu)解,但如果A數(shù)據(jù)量擴(kuò)大,N擴(kuò)大和X擴(kuò)大,則可能是較優(yōu)解,因?yàn)橹皇菃渭兊谋闅v了,是O(N)復(fù)雜度算法),且這個(gè)算法實(shí)現(xiàn)邏輯也比較簡(jiǎn)單,語句也比較簡(jiǎn)單。


var A=[500,100,50,10];//

var RT=[[2,0,0,0]];//存儲(chǔ)最終結(jié)果

var s=0x1AFF; //起始數(shù)據(jù)

for(;s>0;s--){

    //提取各個(gè)的系數(shù)

    a0=s>>12;

    a1=(s>>8)&0xf;

    a2=(s>>4)&0xf;

    a3=s&0xf;

    if(a1>10 || a0+a1+a2+a3>15) continue; // 過濾掉不符合系數(shù)條件的

    if(a0*A[0]+a1*A[1]+a2*A[2]+a3*A[3] ===1000) RT.push([a0,a1,a2,a3]);

}

console.log(RT);

var cnt=RT.length;

console.log(cnt);//輸出可能數(shù)量


查看完整回答
反對(duì) 回復(fù) 2019-04-04
  • 4 回答
  • 0 關(guān)注
  • 582 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)