1. 程式人生 > >你有1元、5元、7元三種硬幣,求一種方法,用最少的硬幣湊出m元

你有1元、5元、7元三種硬幣,求一種方法,用最少的硬幣湊出m元

/*
 * 程式碼:學習動態規劃的思想,採用自底向上,用迭代去實現。
 * 
 * 硬幣數目的最小單元是1、3、5,湊一次必須使用三個單元之一,假設
 * 錢的數目為m,則 m = 1 * x + 3 * y + 5 * z;
 * 
 * 如果要湊夠0元,只有一種方案,使用0個硬幣。
 * 如果要湊夠1元,只有一種方案,先拿1元,再湊夠剩下的1-1=0元,而由上一步湊0元方法已知。
 * 如果要湊夠2元,只有一種方案,先拿1元,再湊夠剩下的2-1=1元,而由上一步湊1元方法已知。
 * 如果要湊夠3元,有兩種方案,先拿1元,再湊夠剩下的3-1=2元;或者先拿2元,再湊夠剩下的3-2=1元。
 *             而由上一步湊1元和2元方法已知,比較兩種方法,哪種方法使用硬幣數目少。
 * 如果要湊夠4元,有兩種方案,先拿1元,再湊夠剩下的4-1=3元;或者先拿3元,再湊夠剩下的4-3=1元;
 *             而由上一步湊1元和3元方法已知,比較兩種方法,哪種方法使用硬幣數目少。
 * 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
 * 如果要湊夠10元,有三種方案,先拿1元,再湊夠剩下的10-1=9元;或者先拿3元,再湊夠剩下的10-3=7元;
 *             或者先拿5元,再湊夠剩下的10-5=5元。
 *             而由上一步湊7元和9元方法已知,比較兩種方法,哪種方法使用硬幣數目少。
 * 如果要湊夠11元,有三種方案,先拿1元,再湊夠剩下的11-1=10元;或者先拿3元,再湊夠剩下的11-3=8元;
 *             或者先拿5元,再湊夠剩下的11-5=6元。
 *             而由上一步湊10元和8元方法已知,比較兩種方法,哪種方法使用硬幣數目少。
 * 把上述過程用程式碼實現,用兩個for迴圈即可完成。
 */

package others;

public class CoinCoin {
    //測試用例
    public static void main(String[] args) {
        int m = 112;
        int[] temp = coinCoin(m);
        for(int i = 0; i <= m; i++) {
            System.out.println(i + "元最少需要" + temp[i] + "個硬幣!");
        }
    }
    //找出最少的錢的數目
    private static int[] coinCoin(int m) {
        int[] a = {1, 3, 5};  //硬幣面值
        int[] temp = new int[m + 1];  //儲存所需硬幣的數目
        for(int i = 0; i <= m; i++) {
            temp[i] = i;    //預設全部使用1元,則i元最多需要使用i個銀幣。
        }
        for(int i = 1; i <= m; i++) {
            //這個外層循壞,依次對1到m個錢數,進行湊數
            for(int j = 0; j < 3; j++) {
                //這個內層迴圈,每次都會固定執行3次
                if(a[j] <= i && temp[i - a[j]] + 1 < temp[i]) {
                    temp[i] = temp[i - a[j]] + 1; 
                    /* a[j] <= i依次判斷i和1,3,5的相對大小,決定第一步有幾種方案,
                     * temp[i - a[j]] + 1 < temp[i]這個不太容易理解,
                     * 我們將temp[i]初始值設為i,在三次內迴圈判斷中,如果這一次temp[i - a[j]]
                     * 比上一次小,那麼就將這一次的值賦給temp[i]
                     *
                     * 舉例,i=6,此時前面迴圈執行完畢
                     * temp[0] = 0,temp[1] = 1
                     * temp[2] = 2,temp[3] = 1
                     * temp[4] = 2,temp[5] = 3
                     * 第一步就有三種方案,當前內迴圈執行三次
                     * j = 0 時,a[j]=1 <= i=6成立,temp[i - a[j]] + 1 = temp[6-1] + 1 = 4 < temp[i]=6成立
                     *      所以temp[6] = temp[i - a[j]] + 1 = 4
                     * j = 1 時,a[j]=3 <= i=6成立,temp[i - a[j]] + 1 = temp[6-3] + 1 = 2 < temp[i]=4成立
                     *      所以temp[6] = temp[i - a[j]] + 1 = 2
                     * j = 2 時,a[j]=5 <= i=6成立,temp[i - a[j]] + 1 = temp[6-5] + 1 = 2 < temp[i]=2不成立
                     *      所以temp[6] = temp[i - a[j]] + 1 = 2
                     * 這樣,最終temp[6] = 2,就從三種方案中選擇出最小的了
                     */
                }
            }
        }
        return temp;
    }
}

相關推薦

157硬幣方法最少硬幣m

/* * 程式碼:學習動態規劃的思想,採用自底向上,用迭代去實現。 * * 硬幣數目的最小單元是1、3、5,湊一次必須使用三個單元之一,假設 * 錢的數目為m,則 m = 1 * x + 3 * y + 5 * z; * * 如果要湊夠0元,只有一種方案,

關於Hibernate5.05.15.25.3下載不了的解決辦法

突然發現下載Hibernate,下載不了,可能是天國的和諧太厲害了,直接下載不了~從下圖中體驗一下: 1.搜尋hibernate,進入官網:http://hibernate.org/ 2.看到Hibernate ORM,點選右下角的More或-> 3.看到右上角的Latest s

小於等於n去買100只雞大雞5/只小雞3/只還有1/3/只得小雞分別記為下x,y,z只程式設計求解x,y,z所有可能解

/***************************************************** copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name: Author:

Centos下Yum安裝PHP 5.55.67.0

mbstring eas common mysql 編譯安裝 test .rpm mysq cli Centos系統自帶的php版本很低,如果我們需要使用高版本的php,可以不用編譯安裝,直接用yum安裝會非常省時省力。 1.檢查當前安裝的PHP包yum list inst

CentOS 6.5通過yum安裝mysql 5.55.65.7版本

yum安裝mysql mysql5.5 mysql5.6 mysql5.7 1、安裝mysql的yum源,這個源包括5.5、5.6、5.7版本:備註:如果要專門下載某個版本,可以到http://dev.mysql.com/downloads/repo/yum下載。[root@agile ~]#

c語言 存款利息計算10005方案存款五年後的本息和

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

PHP 5.25.35.45.55.6 各版本新功能詳解

總結 PHP5.2 以前:autoload, PDO 和 MySQLi, 型別約束 PHP5.2:JSON 支援 PHP5.3:棄用的功能,匿名函式,新增魔術方法,名稱空間,後期靜態繫結,Heredo

PHP 5.35.45.55.6 中的新特性

PHP 5.6 1、可以使用表示式定義常量 https://php.net/manual/zh/migration56.new-features.php 在之前的 PHP 版本中,必須使用靜態值來定義常量,宣告屬性以及指定函式引數預設值。 現在你可以使用包括數值、字串字面量以及其他常量在

雲服務模式:SaaSPaaS和IaaS適合

 有人分析了Techno-Pulse網站的GoogleAnalytics資料,而後發現,其中有幾個關鍵詞與CloudServiceModels(雲服務模式)有關。而且讀者們似乎更在意服務模式方面的實用資訊,以便幫助自己作出決定。雖然,不少文章中都曾或多或少的提及,本文將和

php5.2 5.35.45.55.6 各個版本升級不相容點

最近工作中將php5.2升級到php5.6,在升級的過程中,需要對php各個版本之間的不相容的問題進行討論和測試論證。依據php版本不相容 分支說明 , 分別在多個版本之間進行了測試,分享如下:php5.3 不相容5.21.在 PHP 5.3.x 的所有繫結擴充套件中應用了新

PHP 5.25.35.45.55.6 版本區別對比以及新功能詳解

截至目前(2015.1), PHP 的最新穩定版本是 PHP5.5, 但有差不多一半的使用者仍在使用已經不在維護  的 PHP5.2, 其餘的一半使用者在使用 PHP5.3 .因為 PHP 那“集百家之長”的蛋疼語法,加上社群氛圍不好,很多人對新版本,新特徵並無興趣。本文將會

目前人工智慧最火的是-深度學習機器學習採用深入淺出的方法結合例項並配以大量程式碼練習重點講解深度學習框架模型科學演算法訓練過 程技巧。

深度學習DeepLearning人工智慧核心技術開發與應用 2018年09月13日— 2018年09月16日 北京 物件:從事人工智慧、深度學習、計算機視覺、人臉識別、 影象處理、 行人檢測、自然語言處理 區塊鏈等醫學 遙感 電力 金融 經濟等高維度 資料領域相關的老師 研究生 工程師;

一個函式 x x大於1 y等於 { 2x-1 1大於等於x小於10 3x-11 x大於等於10 寫段程式輸入x輸出y。

題目描述 有一個函式 | x x<1 y= { 2x-1 1<=x<10 | 3x-11 x>=10 寫一段程式,輸入x,輸出y。 將下面的程式填寫完整。 #include <stdio.h> int main() { int x,y;

資料結構實驗-C語言-二叉樹的建立後序遍歷的遞迴演算法和非遞迴演算法,求葉子結點數目,求二叉樹深度判斷二叉樹是否相似,求二叉樹左右子樹互換二叉樹層序遍歷的演算法判斷二叉樹是否是完全二叉樹

1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後

5得最爽的黑科技軟體神器款都好無以倫比

閒話少扯,直接切入正題,5款軟體件,值得你高調的收藏的! 1、一粒雲盤軟體 一款專注於企業資料管理的操作軟體,每一個精細的許可權下都是一次小小的改革,主要用於大型企業的資料資產保護,一個規模穩大的企業,資料是不可忽視的,有可能一個小小的資料丟失或者破壞就可能引發企業一次大災難,當然你可以說,

所謂的效能是負載吞吐量可接受的響應時間和資源利用率之間的平衡。

所謂的效能,是負載、吞吐量、可接受的響應時間和資源利用率之間的一種平衡。 通過一個理髮店的例子,然後引出最佳併發使用者數和最大併發使用者數的概念 背景:理髮店共有3名理髮師,每名理髮師完成一次理髮都耗時1小時,店裡有還有一些位子供客人等位,每個客人在理髮店呆的時間超過3小時就會無法忍受離

【java學習記錄】7.定義一個介面ArearInterface其中包含一個方法計算面積三角形矩形圓形的面積

* 定義一個介面ArearInterface,其中包含一個方法,計算面積 * 定義三個類:三角形、矩形、圓形,分別實現ArearInterface中的方法 * 定義一個主類,將三角形和圓形的面積顯示在螢幕上ArearInterface 介面public interface A

動態規劃解決最少硬幣m

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need t

二叉樹建立遍歷(前序中序後序)葉節點個數節點個數

二叉樹是筆試面試中考試最頻繁的資料結構之一,主要包括,程式建立一個二叉樹,三種次序遍歷二叉樹,返回葉子節點的數目,求二叉樹節點的總數等。建立一個二叉樹節點的資料結構 typedef struct Node {int data;struct Node *left,*right

無極哥教微信爆粉的方法天加滿5000好友

直接 數據傳輸 騰訊 用戶數據 規則 時間 服務器 之前 href 2018年,朋友圈或各種社交場合總時不時冒出“某某做微信爆粉,一天加滿5000好友”的說法。這確實是存在的,但嚴重違規。突破每日添加好友數量上限的雙向爆粉,必須使用修改微信底層協議的第三方軟件才能實現。今天