博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【贪心策略】硬币问题
阅读量:4091 次
发布时间:2019-05-25

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

问题描述:

有vi=1元、5元、10元、50元、100元、500元的硬币c1、c2、c3、c4、c5枚。若用这些硬币来凑出A元,最少需要多少枚硬币?

贪心策略:

初始化numOfCoins=0,若A>0

每一次都优先挑金额最大的硬币 i

      若该硬币金额大于A,则挑金额次之的硬币

      若该硬币金额小于A & 该硬币的剩余数量 ci 不为0,则A=A-vi,numOfCoins++

代码实现:

// 贪心算法————硬币问题public class CoinsTest {	public static void main(String[] args) {		int[] v = {0, 1, 5, 10, 50, 100, 500}; // 硬币的金额		int[] c = {0, 3, 2, 1, 3, 0, 2}; // 硬币的个数		int A = 620; // 数额				int numOfCoins = 0;		  // 记录总共需要的硬币个数		int[] flag = new int[7];  // 记录对应的硬币被选择的次数 		for (int i=6; i>0; i--) {			// A == 0 			if (A == 0) {  // 代码出口				break;			}			// A > 0			while (c[i] > 0) {				if (v[i] > A) {					break;				} else {					A -= v[i];					c[i]--;					numOfCoins++;					flag[i]++;				}			}		}				//打印方案选择的硬币个数		System.out.println("要凑出A元,至少需要"+ numOfCoins +"枚硬币");		//打印方案		System.out.print("所选择的硬币为:");		for (int i=6; i>0; i--) {			while (flag[i] > 0) {				System.out.print(v[i]+"\t");				flag[i]--;			}		}	}}

 运行结果:

 

转载地址:http://lbnii.baihongyu.com/

你可能感兴趣的文章
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>