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

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

使用遞歸的Java硬幣找零問題——不工作

使用遞歸的Java硬幣找零問題——不工作

莫回?zé)o 2023-09-27 16:12:46
我的程序是錯(cuò)誤的,因?yàn)橘?2 英鎊的方法肯定不止 2 種。public class TwoPounds{? ? private static int[] coins = {1, 2, 5, 10, 20, 50, 100, 200};? ? private static int amount;? ? private static int count;? ? public TwoPounds()? ? {? ? ? ? amount = 2;? ? ? ? count = 0;? ? }? ? public static void main(String[] args)? ? {? ? ? ? TwoPounds run = new TwoPounds();? ? ? ? count = run.combos(amount);? ? ? ? run.printOut();? ? }? ? public int combos(int amountIn)? ? {? ? ? ?? ? ? ? if (amountIn == 0)? ? ? ? {? ? ? ? ? ? return 1;? ? ? ? }? ? ? ? if (amountIn < 0)? ? ? ? {? ? ? ? ? ? return 0;? ? ? ? }? ? ? ? int combosCount = 0;? ? ? ? for(int i = 0; i < coins.length; i++)? ? ? ? {? ? ? ? ? ? System.out.println("amountIn now is " + amountIn);? ? ? ? ? ? combosCount += combos(amountIn - coins[i]);? ? ? ? }? ? ? ? return combosCount;? ? }? ? public void printOut()? ? {? ? ? ? System.out.println("\n\n\n");? ? ? ? System.out.println("There are " + count + " ways can 2 pounds be made, "? ? ? ? ? ? + "using any number of coins");? ? ? ? System.out.println("\n\n\n");? ? }?}輸出:There are 2 ways can 2 pounds be made, using any number of coins
查看完整描述

2 回答

?
Qyouu

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

您的coins單位是美分(或便士,因?yàn)槲也履褂玫氖怯㈡^),所以既然您使用amountIn - coins[i]它們進(jìn)行表演,這意味著您的金額也是美分/便士。

因此,將您的金額更改為:

amount = 200;

值得花點(diǎn)時(shí)間考慮一下變量命名,以及它如何幫助識(shí)別甚至完全避免這個(gè)問題。術(shù)語(yǔ)“amount”和“amountIn”是不明確的。

文字中沒有任何暗示單位的內(nèi)容。因此,養(yǎng)成使變量名稱盡可能具體且明確的習(xí)慣 - 并在適當(dāng)?shù)那闆r下包含單位。

例如,如果變量被稱為“amountInPounds”,那么在寫入時(shí)錯(cuò)誤會(huì)變得更加明顯amountInPounds - coins[i]

現(xiàn)在,在更新到 之前amount = 200;,請(qǐng)注意:

1) 將會(huì)有大量結(jié)果(200 便士、198 便士+2p),這將需要一些時(shí)間來迭代一次一便士,加上

2)您的代碼當(dāng)前編寫為遍歷每個(gè)離散的有序組合 - 例如,它將進(jìn)行計(jì)數(shù):

  • 198“1分”+1“2分”

  • 197“1分”+1“2分”+1“1分”

  • 196“1分”+1“2分”+2“1分”

  • 195“1分”+1“2分”+3“1分”等

同樣,執(zhí)行時(shí)間太多了。你想要的是不要for(int i = 0; i < coins.length; i++)每次都從零開始,而是添加一個(gè)額外的參數(shù)combos- 所以像這樣:

public int combos (int amountIn, int startCoin)

{       


    // blah ... existing code ... blah


    for(int i = startCoin; i < coins.length; i++)

    {

        System.out.println("amountIn now is " + amountIn);

        combosCount += combos(amountIn - coins[i], i);

    }

最后,正如我之前所說,200 會(huì)產(chǎn)生很大的數(shù)字,您實(shí)際上無(wú)法確認(rèn)其正確性,因此請(qǐng)從可以檢查的少量數(shù)字開始。


查看完整回答
反對(duì) 回復(fù) 2023-09-27
?
慕桂英546537

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

該算法允許使用多個(gè)相同面額的硬幣,因此有 2 種方法可以賺 2 英鎊:

  1. {1, 1}

  2. {2}


查看完整回答
反對(duì) 回復(fù) 2023-09-27
  • 2 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報(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)