【贪心策略】硬币问题

本文介绍了如何应用贪心策略解决硬币找零问题。在给定不同面额的硬币情况下,通过每次都选择最大面额的硬币优先使用,以求达到凑出指定金额A时所需的最少硬币数。文章提供了一种贪心算法的代码实现,并给出了运行结果。
摘要由CSDN通过智能技术生成

问题描述:

有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]--;
					num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值