国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java動態規劃算法——硬幣找零問題實例分析

瀏覽:94日期:2023-08-15 13:17:38

本文實例講述了java動態規劃算法——硬幣找零問題。分享給大家供大家參考,具體如下:

問題描述

現在有3種硬幣分別為:1元,5元,10元,現在給你63元,讓你全部換成硬幣,求出最小硬幣數量,也就是說,怎么用最少的硬幣數湊成63元。

分析問題

解決這個問題,我們可以將這個大問題分成若干個小問題,自下而上解決問題。

1元對應的最小硬幣數是1

2元對應的最小硬幣數是2

3元對應的最小硬幣數是3

4元對應的最小硬幣數是4

……

63元對應的最小硬幣數是XXX

假設我們將前邊計算出的金額對應的最小硬幣數像備忘錄一樣記錄下來,那么后邊金額對應的最小硬幣數的就好說了,為什么?

舉例:假設你要求63的最小硬幣數,那么你需要這樣計算:63-1=62、63-5=58、63-10=53。假設62、58、53對應的最小硬幣數已經被你記錄在了備忘錄數組。這時候你只需要找出62、58、53中誰對應的最小硬幣數最小,然后加1,就是63對應的最小硬幣數。因為63比62、58、53都大,最好的情況無非就是在62、58、53中找出最小的一種情況加1,這就是最優解!

按照這種備忘錄思想,我們進行編程。首先將我們要處理的數據轉換成數組和必要參數。

int[] coins = { 1 , 5 , 10 }; //硬幣面額數組int adm = 63; //要求的金額int[] money = new int[63+1]; //金額數組,也就是備忘錄數組

說明:money數組就是備忘錄數組,例如:money[0]對應0,money[1]對應1,money[2]對應2……

接下來,將我們上邊的解題思路抽象成函數,函數中無非就是:循環,判斷,賦值……如何利用這些邏輯語句,將我們的思路描述出來,這是最難的,因為要做到滴水不漏,情況都要考慮周全,一步錯結果就錯,這需要長久鍛煉抽象邏輯思維。我比較習慣的方式是邊看代碼,邊關聯結題思路,然后模仿,代碼中有注釋,大家邊看邊分析吧:

public static void main(String[] args) { int[] coins = {1,5,10}; int money = 63; changeMoney(coins,money);} /** * 硬幣找零算法,備忘錄方法 * @param coins 硬幣面額數組 * @param money 目標金額 */public static void changeMoney( int[] coins , int money ) { //備忘錄數組,一一對應 int[] memo = new int[money + 1]; //0元對應的最小硬幣數是0 memo[0] = 0; System.out.println( '金額t' + '對應的最小硬幣數' ); //遍歷備忘錄數組,為每個金額記錄他的最小硬幣數,我們從1元開始 for( int currentMoney = 1 ; currentMoney <= money ; currentMoney++ ) { //默認最小硬幣數就是當前金額的本身 //舉例:63元最多就是63個1元的硬幣唄 int minCoins = currentMoney; //遍歷硬幣面額數組,找到前邊所能找到的最小硬幣數加1 for( int coinKind = 0 ; coinKind < coins.length ; coinKind++ ) { //只有當前金額大于等于某個硬幣面額的時候才可以用這種方法 //舉例:5-1=4,5-5=0,5-10=-5,我們沒有-5元好吧…… if( currentMoney >= coins[coinKind] ) { //我們在備忘錄中查找之前的金額對應的最小硬幣數 //如果能查到就在它的基礎上加1 int tempCoins = memo[currentMoney - coins[coinKind]] + 1; //找到幾種情況中最小的硬幣數 //舉例:63元 tempConis //可以是memo[63-1]+1、memo[63-5]+1、memo[63-10]+1 //我們要找到最小的 if( tempCoins < minCoins ) { minCoins = tempCoins; } } } //找到當前金額對應的最小硬幣數,我們將它記錄在備忘錄中 memo[currentMoney] = minCoins; System.out.println( currentMoney + 't' + memo[currentMoney] ); }}

運行結果

金額對應的最小硬幣數1122334451627384951011121231341451521631741851962022132242352462532642752862973033143253363473543653763873984044154264374484554664774884995055165275385495565675785895910606617628639

更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

標簽: java
相關文章:
主站蜘蛛池模板: 亚洲国产精品综合久久久 | 国语一级毛片 | 欧美videos娇小 | 频黄| 精品欧美日韩一区二区 | 色拍拍噜噜噜aⅴ在线观看 色青青草原桃花久久综合 色婷婷91 | 亚洲精品国产一区二区三区在 | 自拍三级 | 欧美一级毛片免费高清aa | 91大神大战丝袜美女在线观看 | 国产性自爱拍偷在在线播放 | 成年日韩片av在线网站 | 亚洲欧美性视频 | 高清在线精品一区二区 | 免费观看欧美一区二区三区 | 欧美久在线观看在线观看 | 欧美日韩一区二区高清视 | 国产亚洲精品久久麻豆 | 亚洲精品欧美 | 欧美一区二区三区播放 | 久久精品免费观看国产软件 | 男人天堂网在线观看 | 久久成人免费大片 | 国内自拍一区 | 国产成人精品免费视频大全办公室 | 高清欧美性xxxx成熟 | 欧美精品久久一区二区三区 | 欧美另类特大 | 国产91在线 | 亚洲 | 日韩一区二区在线免费观看 | 国产人成免费视频 | 成年人网站免费 | 4438全国最大成人网视频 | 国产成人99久久亚洲综合精品 | 久久视频在线观看免费 | 欧美白人猛性xxxxx交69 | 成人在线中文字幕 | 亚洲欧美日本在线观看 | 114一级毛片免费观看 | 99久久精品免费看国产高清 | 国产色司机在线视频免费观看 |