已知需要找给顾客的零钱金额为N,当前钱币的面值种类为1,9,10三种,求找给顾客尽量少的钱币数的找零方法,给出程序算法设计思路

原创 2016年09月01日 16:34:24

这是典型的贪心算法应用场景,也叫贪婪算法。算法有很多种,博主目前没有研究过,所以只针对这个问题讲一下自己的理解。

贪心算法之所以叫贪心,因为它的特点是不考虑大局,只针对局部,在当前条件下选择最优解,有利也有弊。绝大部分问题都不能依靠贪心算法解决,但是大多数问题都可以依靠贪心算法得到近似最优解。

程序设计:

做一个面值种类由大到小循环,每次将零钱金额对当前面值种类取商取余,商记录到数组,余数当作下一次循环的零钱金额。

java代码:

package zjyang.changegive;

public class ChageGive {

	public static void main(String[] args) {
		//设置最大面值种类
		int[] kinds = {10,9,1};
		//零钱总额
		int sum = 991;
		System.out.println("零钱金额为" + sum + ",找钱方案为:");
		ChageGive chageGive= new ChageGive();
		int[] result = chageGive.count(kinds, sum);
		for(int i = 0;i < result.length;i++){
			System.out.println(result[i] + "张" + kinds[i] +"元");
		}
	}
	
	//贪心算法
	//做一个面值种类由大到小循环,每次将零钱金额对当前面值种类取商取余,商为当前面值数,余数当作下一次循环的零钱金额。
	private int[] count(int[] kinds,int sum){
		
		int[] result =new int[kinds.length];
		for(int i = 0; i<kinds.length;i++){
			//当前面值数
			result[i] = sum / kinds[i];
			//下一次循环的零钱金额
			sum = sum % kinds[i];
		}
		return result;
	}
}





1041 -- 找零钱

1041 -- 找零钱
  • jtahstu_akoj
  • jtahstu_akoj
  • 2015年08月29日 10:13
  • 3025

1216:找零钱

1216:找零钱 Description 在售货员向顾客找零钱时,一般都是尽可能找最少数量的钱币给顾客。下面将给出一定数额的人民币,请将其分解为数量最少的货币。货币单位仅有100 ...
  • zhangao230
  • zhangao230
  • 2017年09月13日 16:49
  • 59

最少钱币数 - 动态规划法求解 - 可输出最终找零方案

假设cNums[i]是记录了需要的最少硬币数来找零i元的。那么如果我们使用面值是x的硬币来找零,那么现在我们就需要 cNums[i] = 1+cNums[i-x]; 记得i是总钱币数,需要减少x,然后...
  • kenden23
  • kenden23
  • 2013年11月21日 19:03
  • 4856

动态规划:最少硬币找零问题、01背包问题、完全背包问题

动态规划把问题分为子为题,解决了这些子问题,再把子问题合并起来,便可以得到问题的解。在解决子问题过程中,需要把子问题的解保存起来方便后面使用。 最少硬币找零问题为:给予不同面值的硬币若干种种(每种硬...
  • wangbaochu
  • wangbaochu
  • 2016年11月09日 15:45
  • 2713

最少钱币数

很久之前在网上参考了下,写了个程序,现在重新看下,觉得写得真的不好,献丑了。 正确的解法应该是使用动态规划法,请参看我另外一篇博客: http://blog.csdn.net/kenden23/ar...
  • kenden23
  • kenden23
  • 2013年09月22日 21:07
  • 4693

最少硬币找零问题-动态规划

动态规划把问题分为子为题
  • KangRoger
  • KangRoger
  • 2014年06月30日 21:15
  • 22042

从找零到人民币面额设计

引子 晚上坐飞机从北京回成都,在机场候机花了23元买了一袋麻辣牛肉干。身上没零钱,就拿了一张100给售货员找零77。突然觉得这件事情太好玩儿了。中国发行的货币有100、50、20、10、5、1这几...
  • kiwi_coder
  • kiwi_coder
  • 2015年04月17日 08:24
  • 1857

人民币找零 vs 硬币问题 贪心 vs 动态规划

人民币找零 [问题描述]在50元和100元面值的人民币出现之前,人民币仅由10元、5元、2元、1元、5角、2角、1角和5分、2分、1分面值的钱币组成。现给定一个10000元以内,精确到1分的人民币数...
  • sinat_34943123
  • sinat_34943123
  • 2016年05月12日 10:10
  • 1063

动态规划-金额为Sum的所有纸(硬)币组合

问题 给定一个数值sum,假设我们有m种不同类型的硬币{V1, V2, ..., Vm},如果要组合成sum,求所有可能的组合数。 经典面试题 [华为面试题]  ...
  • f2006116
  • f2006116
  • 2016年09月17日 22:03
  • 739

编程之美_004硬币找零,递归算法

// 硬币找零 递归算法 public class Test_001 { // 硬币的类型 private static int[] money = { ...
  • adam_zs
  • adam_zs
  • 2013年01月09日 10:07
  • 3384
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:已知需要找给顾客的零钱金额为N,当前钱币的面值种类为1,9,10三种,求找给顾客尽量少的钱币数的找零方法,给出程序算法设计思路
举报原因:
原因补充:

(最多只允许输入30个字)