日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java零钱换整程序_贪心算法换零钱(java)

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java零钱换整程序_贪心算法换零钱(java) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

貪心算法思想

貪心算法總是做出在當(dāng)前看來做好的選擇。也就是說貪心算法并不從整體最后考慮,他做出的選擇只是局部最優(yōu)選擇。他所做出的僅是在某種意義上的局部最優(yōu)解。貪心算法不是對所有問題都能得到整體最優(yōu)解,但對范圍相當(dāng)廣泛的許多問題他能產(chǎn)生整體最優(yōu)解或者是整體最優(yōu)解的近似解。

1.算法思路

貪心算法是一種不追求最優(yōu)解,只希望得到較為滿意解的方法。貪心算法一般可以快速得到滿意的解,因為它省去了為找最優(yōu)姐要窮盡所有肯呢個而必須耗費大量時間。貪婪(心)算法是一種改進了的分級處理方法。其核心是根據(jù)題意選取一種量度標準。然后將這多個輸入排成這種量度標準所要求的順序,按這種順序一次輸入一個量。如果這個輸入和當(dāng)前已構(gòu)成在這種量度意義下的部分最佳解加在一起不能產(chǎn)生一個可行解,則不把此輸入加到這部分解中。這種能夠得到某種量度意義下最優(yōu)解的分級處理方法稱為貪婪算法。

對于一個給定的問題,往往可能有好幾種量度標準。初看起來,這些量度標準似乎都是可取的,但實際上,用其中的大多數(shù)量度標準作貪婪處理所得到該量度意義下的最優(yōu)解并不是問題的最優(yōu)解,而是次優(yōu)解。因此,選擇能產(chǎn)生問題最優(yōu)解的最優(yōu)量度標準是使用貪婪算法的核心。

一般情況下,要選出最優(yōu)量度標準并不是一件容易的事,但對某問題能選擇出最優(yōu)量度標準后,用貪婪算法求解則特別有效。最優(yōu)解可以通過一系列局部最優(yōu)的選擇即貪婪選擇來達到,根據(jù)當(dāng)前狀態(tài)做出在當(dāng)前看來是最好的選擇,即局部最優(yōu)解選擇,然后再去解做出這個選擇后產(chǎn)生的相應(yīng)的子問題。每做一次貪婪選擇就將所求問題簡化為一個規(guī)模更小的子問題,最終可得到問題的一個整體最優(yōu)解。

2.基本特性

從問題的某一個初始解除發(fā)逐步逼近給定的目標,以盡可能快的求得更好的解。當(dāng)達到算法中的某一步不能再繼續(xù)前進時就停止算法,給出近似解。

3.實例:換零錢

該程序?qū)崿F(xiàn)超市收銀的找零方案,輸入需要找補給顧客的金額,由程序計算出該金額可有哪些面值人民幣組成。人民幣假設(shè)有100 50 20 10 5 2 1 0.5 0.2 0.1

package 練習(xí);

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class 貪心算法找零錢 {

public static int MAX=10;

public static double Value[]={10000,5000,2000,1000,500,200,100,50,20,10};

//public static double Value[]={100,50,20,10,5,2,1,0.5,0.2,0.1};如果改成這行,結(jié)果就會出錯

public static int num[]=new int[MAX];

public static void main(String[] args) {

List ag=new ArrayList();

for(int i=0;i

ag.add(Value[i]);

}

System.out.println("請輸入要換的數(shù)值");

Scanner scanner=new Scanner(System.in);

double a=scanner.nextDouble();

conver(a*100);

System.out.println("找零");

for(int i=0;i

if(num[i]>0){

System.out.println("面值"+Value[i]/100+"一共需要 "+num[i]+"張");

}

}

}

private static void conver(double a) {

// TODO Auto-generated method stub

int i,j;

for( i=0;i

if (a>Value[i])

break;

while (a>0&&i

if(a>=Value[i]){

a-=Value[i];

num[i]++;

}else if(a<10&&a>=5){

num[MAX-1]++;

break;

}else

i++;

}

}

}

結(jié)果:

請輸入要換的數(shù)值

212.1

找零

面值100.0一共需要 2張

面值10.0一共需要 1張

面值2.0一共需要 1張

面值0.1一共需要 1張

總結(jié)

以上是生活随笔為你收集整理的java零钱换整程序_贪心算法换零钱(java)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。