1 问题描述
现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < … < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < … < dm的硬币,其中d1 = 1,且每种硬币数量无限可得)

2 解决方案
2.1 动态规划法

本文编码思想参考自《算法设计与分析基础》第三版,具体讲解如下:

package com.liuzhen.chapter8;public class ChangeMaking {public void getChangeMakingN(int[] coinType,int n){int[] minNumber = new int[n+1];   //初始化后,所有元素均为0,其中minNumber[0] = 0,表示无须找零int[] tempMinJ = new int[n+1];    //tempMinJ[0]在此处无含义for(int i = 1;i <= n;i++){int j = 0;int tempJ = -1;      //用于h获取minNumber[i]最小值中当前新使用的硬币面值数组下标int temp = Integer.MAX_VALUE;        //计算当前minNumber[i]最小值,初始化int类型最大值while(j < coinType.length && i >= coinType[j]){if(minNumber[i-coinType[j]] + 1 < temp){temp = minNumber[i-coinType[j]] + 1;tempJ = j;}j++;}minNumber[i] = temp;tempMinJ[i] = tempJ;}System.out.println("给定硬币面值种类依次为:");for(int i = 0;i < coinType.length;i++)System.out.print(coinType[i]+" ");System.out.println("\n找零大小从1到"+n+"的最少硬币组合数目为:");for(int i = 1;i < minNumber.length;i++)System.out.print(minNumber[i]+" ");System.out.println("\n对应找零大小从1到"+n+"新增的硬币数组下标为:");for(int i = 1;i < tempMinJ.length;i++)System.out.print(tempMinJ[i]+" ");System.out.println("\n对应找零大小从1到"+n+"新增的硬币数组下标对应的硬币面值为:");for(int i = 1;i < tempMinJ.length;i++)System.out.print(coinType[tempMinJ[i]]+" ");System.out.println("\n\n找零大小为"+n+"的硬币组合最少数目为:"+minNumber[minNumber.length-1]);System.out.print("找零大小为"+n+"的硬币组合最少数目对应的硬币面值依次为:");int needN = n;int minJ = tempMinJ.length-1;while(needN > 0){System.out.print(coinType[tempMinJ[minJ]]+" ");needN = needN - coinType[tempMinJ[minJ]];minJ = needN;}}public static void main(String[] args){ChangeMaking test = new ChangeMaking();int[] coinType = {1,3,4};test.getChangeMakingN(coinType, 6);}
}

运行结果:

给定硬币面值种类依次为:
1 3 4
找零大小从1到6的最少硬币组合数目为:
1 2 1 1 2 2
对应找零大小从1到6新增的硬币数组下标为:
0 0 1 2 0 1
对应找零大小从1到6新增的硬币数组下标对应的硬币面值为:
1 1 3 4 1 3 找零大小为6的硬币组合最少数目为:2
找零大小为6的硬币组合最少数目对应的硬币面值依次为:3 3

Java实现找零问题相关推荐

  1. 动态规划在求解硬币问题中的应用(JAVA)--币制最大化、找零问题、硬币收集问题

    动态规划:这种算法思想多用来求解最优化问题,因此这里存在一个最优化法则,法则指出最优化问题任一实例的最优解,都是由其子实例的最优解构成的.一般来说,自底向上的动态规划更容易设计,但是带有记忆功能的自顶 ...

  2. Java 实现循环输入商品编号和购买数量,当输入n时结账,结账时计算应付金额并且找零

    问题描述 循环输入商品编号和购买数量,当输入n时结账,结账时计算应付金额并且找零. 目录 问题描述 (一)定义初始变量 (二)问题分析 (1)循环语句的选择 1. for语句 2. while语句 3 ...

  3. java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现

    硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...

  4. Java - 初探贪心算法(纸币找零,背包问题)

    贪心算法 1. 什么是贪心算法? 二.贪心算法的基本思路 三.贪心算法适用的问题 四.贪心算法的实现框架 五.贪心策略的选择 六.贪心算法的几个例子 1. 纸币找零问题 2. 背包问题 1. 什么是贪 ...

  5. java 给定价格和付款金额计算找零金额-挖财笔试编程题

    /*** 根据应收金额 dcost, 和dCash实收现金计算找零多少* @param dCash* 现金* @param dCost* 金额*/public static void printCha ...

  6. 算法笔记_048:找零问题(Java)

    目录 1 问题描述 2 解决方案 2.1 动态规划法   1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < ... < dm的硬币?(PS:假 ...

  7. 北京柠檬Java_leetcode 860 —柠檬水找零 java实现

    在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必须给 ...

  8. 用动态规划算法求解最少硬币问题 c语言,动态规划算法求解硬币找零问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 看着这代码怎么这么熟悉. package 动态规划找零; import java.util.Scanner; public class Main { pu ...

  9. 硬币找零问题的动态规划实现

    一,问题描述 给定一组硬币数,找出一组最少的硬币数,来找换零钱N. 比如,可用来找零的硬币为: 1.3.4   待找的钱数为 6.用两个面值为3的硬币找零,最少硬币数为2.而不是 4,1,1 因此,总 ...

最新文章

  1. R计算回归模型Mallows’ Cp指标
  2. Django 基本命令
  3. 汇编语言--CMOS RAM芯片
  4. boost::mp11::mp_bind相关用法的测试程序
  5. HihoCoder - 1175 拓扑排序·二
  6. 宝塔设置thinkphp的伪静态_thinkphp等入口文件在public目录的设置方法
  7. Two.js – 为现代浏览器而生的 2D 绘图 API
  8. CIRCOS增加热图、点图、线图和区块属性
  9. bzoj千题计划277:bzoj4513: [Sdoi2016]储能表
  10. goolge hacks
  11. 【SVM回归预测】基于matlab布谷鸟搜索算法优化SVM回归预测【含Matlab源码 1525期】
  12. 数据库设计之需求分析
  13. 数据结构:图的深度优先遍历和广度优先遍历
  14. 高项题目--工期计算
  15. 不知道如何提高视觉语言大模型?浙大与联汇研究院提出新型多维度评测框架...
  16. 欢迎大家体验滴滴Logi-KafkaManager
  17. Hack微信,不一样的安全视角
  18. Android QPython3 制作简易GUI长文本框界面
  19. 汇编语言王爽 实验12
  20. 形式语言与自动机 1.课堂简介,基础知识

热门文章

  1. 域名CNAME记录不能同时适配根域名和www的解决方法
  2. js实现雪花效果(超简单)
  3. From Fidelity to Perceptual Quality: A Semi-Supervised Approach for Low-Light Image Enhancement
  4. 2016这一年读过的那些书
  5. android 高德比例尺,高德地图——添加比例尺控件
  6. pytorch训练GAN的代码(基于MNIST数据集)
  7. 首批5G手机概念热炒,但你真的敢用?
  8. 使用Rust开发操作系统(UEFI基本介绍)
  9. word如何拆分表格
  10. python可以做数据库功能吗_python可以用哪些数据库