硬币问题(JAVA)
硬币问题(JAVA)
解法如下:
package day03;
import java.util.Arrays;
public class 硬币问题 {
public static void main(String[] args) {
int[] money = {1,5,10,50,100,500};
int[] coins = {3,2,1,3,0,2};
int AllMoney = 620;
int minCoin = getMinCoin(money, coins, AllMoney);
System.out.println("选取硬币的个数为:" + minCoin);
}
//参数说明: money:代表1元、5元、10元、50元、100元
//coins: 代表不同大小的硬币各有多少个
//AllMoney 需要支付的钱
//返回值:最少需要多少枚硬币
public static int getMinCoin(int[] money,int[] coins,int AllMoney){
//贪心算法解决:
/*思路如下:
* 1.这个是贴近日常生活的问题:
* 2.能尽可能选则大的硬币去使用,比如说 需要支付543元,应该先从最大的硬币去判断
* 如果可以使用,就使用最大的硬币,不能使用就跳过,接着去寻找尽可能大的硬币去使用
*
*
* */
//得一下判断 如果需要支付的钱 大于你身上所有的硬币金额,就没必要去选了
int MaxMoney = 0;
for (int i = 0; i < money.length; i++) {
MaxMoney+=(money[i]*coins[i]);
}
if(AllMoney>MaxMoney){
System.out.println("你只有有"+MaxMoney+"元小于"+AllMoney+"元");
return 0;
}
int ans = 0; //硬币选取的个数
for (int i = money.length-1; i >=0 ; i--) {
//1.用AllMoney/最大的硬币 是否不等于0
//前提条件是,你要有这个硬币
if(coins[i]>0){
int t = AllMoney/money[i];
//说明可以选取最大的硬币
if(t>0){
if(t>coins[i]){
//如果需要硬币的个数 大于你本身持有的硬币个数
ans+=coins[i];
AllMoney-=coins[i]*money[i];
System.out.println("选取了"+money[i]+"大小的硬币为"+coins[i]);
coins[i]-=coins[i];//将身上的硬币减少
}else{
//代表可以使用这个硬币
ans+=t; //增加选取硬币的个数
AllMoney-=t*money[i]; //t有可能为2 因为如果AllMoney=1100,选取500的硬币就可能为2
System.out.println("选取了"+money[i]+"大小的硬币为"+t);
coins[i]-=t;
}
}
}
}
System.out.println(Arrays.toString(coins));
System.out.println(AllMoney);
return ans;
}
}
这里只考虑了以硬币的额度去选择问题.
比如元选取164元,但是1元的硬币只有3个,5元的硬币有1,不会去选择5元的硬币,因为4<5,就会跳过5元,去选择1元的硬币. 但是1元的硬币只有3个,就会剩余一元没有去支付,这就是程序的缺陷所在.
比如说 选择164元,如果就直接拿个最大的硬币去支付,就不存在选取的问题了。
硬币问题(JAVA)相关教程
JavaScript 10分钟入门
JavaScript 10分钟入门 简介 JavaScript是一门面向对象的动态语言,他一般用来处理以下任务: 1、修饰网页 生成HTML和CSS 生成动态HTML内容 生成一些特效 2、提供用户交互接口 生成用户交互组件 验证用户输入 自动填充表单 3、能够读取本地或者远程数据的前端
java.util.concurrent.LinkedBlockingQueue多线程执行队列任务
java.util.concurrent.LinkedBlockingQueue多线程执行队列任务 实现效果: 代码实现: /* * @author 在下令狐 * @date 2020/10/27 */public class User { private String name; private int age; public String getName() { return name; } public void setNa
Java面试题——Dubbo
目录 (视频教程推荐:java课程) 1.Dubbo 面试题 2.Dubbo 面试题答案解析 1、为什么要用 Dubbo? 2、Dubbo 的整体架构设计有哪些分层? 3、默认使用的是什么通信框架,还有别的选择吗? 4、服务调用是阻塞的吗? 5、一般使用什么注册中心?还有别的选择吗? 6
java实现自定义类加载器
各类加载器虽然以父子相称,但是没有继承关系 (视频教程推荐:java课程) 点入ClassLoader的源码查看样例: * blockquotepre * class NetworkClassLoader extends ClassLoader { * String host; * int port; * * public Class findClass(String name) { * b
C语言实现查找素数
C语言实现查找素数 一、问题 #include stdio.h#include math.hint prime( int p );int PrimeSum( int m, int n );int main(){ int m, n, p; scanf(%d %d, m, n); printf(Sum of ( ); for( p=m; p=n; p++ ) { if( prime(p) != 0 ) printf(%d , p); } printf()
对接外部接口,又一次证书问题!
对接外部接口,又一次证书问题! Java技术栈 www.javastack.cn 关注阅读更多优质文章 作者:funnyZpC 出处:cnblogs.com/funnyzpc/p/10989813.html 最近接一外部接口,接口在本地开发调试及测试都无任何问题(windows下),而上测试环境后测第一次就直接报错误
Web Software Development课程: JavaScript笔记
Web Software Development课程: JavaScript笔记 基本语法 变量有两种定义方式。使用定义变量会let引入一个块范围变量,其值可以更改。使用定义常量(即,其值无法更改的变量)const。在JavaScript中,变量的类型是自动推断的。 在下面,我们创建两个变量并将
JavaScript--基础语法--变量作用域--webstorm调试
JavaScript--基础语法--变量作用域--webstorm调试 ??在学习JavaScript脚本编写时,先构建环境,一个好的环境能够更加有效和迅速的完成项目,本文及接下来的文章都采用这种环境构建。 ?? 1.JavaScript脚本调试 ??首先需要知道调试方法,在webstorm中,新建项目