已知需要找给顾客的零钱金额为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;
	}
}





相关文章推荐

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

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

ACM程序设计大赛-------- 最少钱币数(Java代码)

【问题描述】           这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑 15元,可以用5个...
  • ABS1118
  • ABS1118
  • 2015年06月29日 09:17
  • 756

【笔试题】一个无重复面值的找零算法的思路与实现【方案2】

给出升序排列的N个数字,比如1, 2, 3, 7, 70 找出无法被这组数字组成的最小正整数。(这组数字中每个数字最多使用一次) (1)简单描述你的算法和思路。 (2)用C/C++实现 (3)...

一个无重复面值的找零算法的思路与实现

本题的另外一个解法请看:一个无重复面值的找零算法的思路与实现(二) 在论坛上看到有人问了一个类似的算法题: 给出升序排列的N个数字,比如1, 2, 3, 7, 70 找出无法被这组数...

查询每个年龄的顾客消费金额数的SQL语句

有三个表,书籍表book(id,name,price)和顾客表customer(id,name,age)以及订单表orders(id,bookid,customerid)。 请写出查询每个年龄的顾客消...

钱币组合方法数的问题

8595 钱币组合方法数的问题时间限制:300MS  内存限制:1000K提交次数:43 通过次数:17题型: 编程题   语言: 无限制Description设有n种不同的纸币若干张,可用这n种钱币...

8595钱币组合方法数的问题

  • 2013年01月27日 21:03
  • 20KB
  • 下载

【美团校招在线考试笔试题】钱币面值组合

要求:假设我们有8种不同的钱币面值{1,2,5,10,20,50,100,200},用这些钱币组合成一个给定的数值n,如:n=200.那么一种可能的组合方式为:200=3*1+1*2+1*5+2*20...
  • htq__
  • htq__
  • 2016年03月13日 10:01
  • 1717

8595 钱币组合方法数的问题

8595 钱币组合方法数的问题 时间限制:300MS  内存限制:1000K 题型: 编程题   语言: 无限制 Description 设有n种不同的钱币各若干,可用这n种钱币产生...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:已知需要找给顾客的零钱金额为N,当前钱币的面值种类为1,9,10三种,求找给顾客尽量少的钱币数的找零方法,给出程序算法设计思路
举报原因:
原因补充:

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