找零錢問題的貪心演算法(java描述)

來源:互聯網
上載者:User

 問題描述:

當前有面值分別為2角5分,1角,5分,1分的硬幣,請給出找n分錢的最佳方案(要求找出的硬幣數目最少)

問題分析:

根據常識,我們到店裡買東西找錢時,老闆總是先給我們最大面值的,要是不夠再找面值小一點的,直到找滿為止。如果老闆都給你找分數的或者幾角的,那你肯定不幹,另外,他也可能沒有那麼多零碎的錢給你找。其實這就是一個典型的貪心選擇問題。

問題的演算法設計與實現:

先舉個例子,假如老闆要找給我99分錢,他有上面的面值分別為25,10,5,1的硬幣數,為了找給我最少的硬幣數,那麼他是不是該這樣找呢,先看看該找多少個25分的,誒99/25=3,好像是3個,要是4個的話,我們還得再給老闆一個1分的,我不幹,那麼老闆只能給我3個25分的拉,由於還少給我24,所以還得給我2個10分的和4個1分。

具體實現
//找零錢演算法<br />//輸入:數組m,依次存放從大到小排列的面值數,n為需要找的錢數,單位全部為分<br />//輸出:數組num,對照數組m中的面值存放不同面值的硬幣的個數,就找錢方案<br /> public static int[] zhaoqian(int m[],int n)<br /> {<br /> int k=m.length;<br /> int[] num=new int[k];<br /> for(int i=0;i<k;i++)<br /> {<br /> num<i>=n/m<i>;<br /> n=n%m<i>;<br /> }<br /> return num;<br /> }<br />

public class zhaoqian<br />{<br /> public static void main(String[] args)<br /> {<br /> int m[]={25,10,5,1};<br /> int n=99;<br /> int[] num=new int[m.length];<br /> num=zhaoqian(m,n);<br /> System.out.println(n+"的找錢方案:");<br /> for(int i=0;i<m.length;i++)<br /> System.out.println(num<i>+"枚"+m<i>+"面值");<br /> }<br /> public static int[] zhaoqian(int m[],int n)<br /> {<br /> int k=m.length;<br /> int[] num=new int[k];<br /> for(int i=0;i<k;i++)<br /> {<br /> num<i>=n/m<i>;<br /> n=n%m<i>;<br /> }<br /> return num;<br /> }<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.