8枚硬币问题 java_硬币问题(JAVA)

硬币问题(JAVA)

硬币问题(JAVA)

2f405b6f18e0f80f4607f7c1bccf0568.png

解法如下:

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;

}

}

这里只考虑了以硬币的额度去选择问题.

7344ed591b7e8b100d13db2efe01493d.png

比如元选取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中,新建项目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值