博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪心算法
阅读量:6078 次
发布时间:2019-06-20

本文共 2091 字,大约阅读时间需要 6 分钟。

Java实现贪心算法(找零钱问题)

1 package com.java; 2  3 import java.util.Random; 4 /** 5  * 贪心算法 6  * 贪心算法,又称贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择。 7  * 也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。 8  * 9  * 贪心算法的基本思路如下:10  * 1.建立数学模型来描述问题。11  * 2.把求解的问题分成若干个子问题。12  * 3.对每一子问题求解,得到子问题的局部最优解。13  * 4.把子问题的局部最优解合成原来解问题的一个解。14  *15  * 其实现框架如下:16  * 从问题的某一初始解出发;17  * while (能朝给定总目标前进一步)18  * {19  * 利用可行的决策,求出可行解的一个解元素;20  * }21  * 由所有解元素组合成问题的一个可行解。22  */23 24 /**25  * 钱币找零问题描述:26  * 假设1元、2元、5元、10元、20元、50元、100元的纸币,分别有c0, c1, c2, c3, c4, c5, c6张。27  * 现在要用这些钱来支付K元,至少要用多少张纸币?28  * 用贪心算法的思想:29  * 每一步尽可能用面值大的纸币,在程序中需要事先将Value按照从小到大的顺序排好。30  */31 public class Greed {32 33     //人民币面值集合34     static int[] values = {1, 2, 5, 10, 20, 50, 100};35     //各种面值对应数量集合36     static int[] counts = {20, 10, 20, 11, 6, 3, 5};37 38     public static void main(String[] args) {39         Random ra = new Random();40         int chgn = ra.nextInt(500) + 1;41         int[] num = change(chgn, values, counts);42         System.out.println("需要找零面额\t: " + chgn);43         System.out.println("-------------------------\r\n应找:");44         print(num, values);45     }46 47     /** Function:change 找零钱48      * @param money:人民币数额49      * @param values:面值集合 数组50      * @param counts:现有各面值对应数量集合 数组51      * @return: 各面值需要数量集合 数组52      */53     public static int[] change(int money, int[] values, int[] counts) {54         //用来记录需要的各种面值张数55         int[] result = new int[values.length];56 57         for (int i = values.length - 1; i >= 0; i--) {58             //需要最大面值人民币张数59             int c = Math.min(money / values[i], counts[i]);60             //剩下钱数61             money = money - c * values[i];62             //将需要最大面值人民币张数存入数组63             result[i] = c;64         }65         return result;66     }67 68     private static void print(int[] num, int[] values) {69         for (int i = 0; i < values.length; i++) {70             if (num[i] != 0) {71                 System.out.println("面额为 " + values[i] + "\t元: " + num[i] + "\t张");72             }73         }74     }75 }

 

转载于:https://www.cnblogs.com/weijuanran/p/Greedy.html

你可能感兴趣的文章
Linux系统磁盘管理
查看>>
hdu 2191 (多重背包+二进制优化)
查看>>
home.php
查看>>
neo4j---删除关系和节点
查看>>
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
Q85 最大矩形
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>