package 换零钱;
/*** @author naru* 编写时间: 2021年3月10日* 类名:零钱问题* 题目描述:整钱换零钱问题。输入给定的钱数(double型),输出最少的人民币支出形式(int型)数,人民币单位假设有100元、50元、20元、10元、5元、1元、5角、1角、5分、1分。
例如:输入34.12元,输出20元1张、10元1张、1元4张、1角1张、1分2张
请至少测试如下数据:
(1)   输入3.14元
(2)   输入31.41元
(3)   输入314.15元
(4)   输入31415元
(5)   输入10000000元(一千万)
(6)   输入0.01元
测试数据结果:
20元1张,10元1张,1元4张,1角1张,1份2张.
20元0张,10元0张,1元3张,1角1张,1份4张.
20元1张,10元1张,1元1张,1角4张,1份1张.
20元15张,10元1张,1元4张,1角1张,1份5张.
20元1570张,10元1张,1元5张,1角0张,1份0张.
20元500000张,10元0张,1元0张,1角0张,1份0张.
20元0张,10元0张,1元0张,1角0张,1份1张.*/
public class 零钱问题 {public static void main(String[] args) {change(34.12);change(3.14);change(31.41);change(314.15);change(31415);change(10000000);change(0.01);}/** change方法* 利用循环来进行筛选从而判断要换成多少张已有人民币* 首先因为输入类型为double类型而想要进行判断的面值均为int类型* 为了double类型转成int类型不出现丢失精度的问题* 我们将输入的double类型的数值乘上*100变成整数* 即有了mc = money * 100* 同时将已有的面值也扩大100倍* 即i10000,i5000,i2000,i1000,i100,i10,i1;* 然后我们采用贪心算法来进行求解* 贪心算法即求解局部最优解* (题外话:贪心算法在这道题上运用可以说是没有任何差错非常完美* 但是其实有时候在特殊的面值情况下 是会陷入局部最优的错误判断的* 因此深究下去的话 动态规划方法其实是最有效的解法)* 以34.12为例子 扩大100倍变为3412* 3412/2000 可以求解出我们可换成20块的张数* 3412-(3412/2000)*2000即为剩下的钱数* 以此类推 * 我们用剩下的钱数以同样的方法求解出可换为10块的张数* ....* 最后再使用print输出之前计算出的i2000,i1000等的数值即可*/static void change(double money){int i10000,i5000,i2000, i1000, i100, i10, i1;double mc = money * 100;double r=mc;for (i10000 = 0; i10000 <= mc / 2000; i10000++){r = mc - i10000 * 10000 ;if (r < 10000)break;}for (i5000 = 0; i5000 <= mc / 2000; i5000++){r = r - i5000 * 5000 ;if (r < 5000)break;}for (i2000 = 0; i2000 <= mc / 2000; i2000++){r =r- i2000 * 2000 ;if (r < 2000)break;}for (i1000 = 0; i1000 <= mc / 1000; i1000++){r = r- i1000 * 1000;if (r < 1000)break;}for (i100 = 0; i100 <= mc / 100; i100++){r = r - i100 * 100;if (r < 100)break;}for (i10 = 0; i10 <= mc / 10; i10++){r = r - i10 * 10;if (r < 10)break;}for (i1 = 0; i1<= mc / 1; i1++){r = r - i1 * 1;if (r <= 0)break;}System.out.printf("100元%d张,50元%d张,20元%d张,10元%d张,1元%d张,1角%d张,1份%d张.", i10000,i5000,i2000, i1000, i100, i10, i1);System.out.println();}}
/*运行结果:
100元0张,50元0张,20元1张,10元1张,1元3张,1角0张,1分0张.
100元0张,50元0张,20元0张,10元0张,1元2张,1角1张,1分3张.
100元0张,50元0张,20元1张,10元1张,1元1张,1角3张,1分0张.
100元3张,50元0张,20元0张,10元1张,1元3张,1角0张,1分0张.
100元314张,50元0张,20元0张,10元1张,1元3张,1角0张,1分0张.
100元100000张,50元0张,20元0张,10元0张,1元0张,1角0张,1分0张.
100元0张,50元0张,20元0张,10元0张,1元0张,1角0张,1分1张.
*/

【java】【贪心算法】换零钱问题相关推荐

  1. java零钱换整程序_贪心算法换零钱(java)

    贪心算法思想 贪心算法总是做出在当前看来做好的选择.也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择.他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解, ...

  2. java调度问题的贪心算法_贪心算法——换酒问题

    知识回顾 贪心算法 (greedy algorithm),又称贪婪算法. 是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法. 贪心算法在 有最优子 ...

  3. java贪心算法_来谈谈贪心算法

    前言 之前讲了动态规划,在翻阅资料的时候看到了不少谈论贪心算法的,这两种算法也很有相似之处,正好最近又做到了有关贪心的题,所以今天写篇文章来谈一谈. 贪心算法(英语:greedy algorithm) ...

  4. java贪心算法实现找钱问题

    找钱问题也是贪心算法的常见题 是利用贪心算法以局部最优来实现全局最优 问题描述 假如我们有面额为5元,.100元.50元.20元.1元.10元若干张,现在需要找零157元,以最少的张数把他找完需要少张 ...

  5. java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)

    一.贪心算法 定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化. 二.区间调度问题 1. 问题:我们有一组需求{1,2,3 ...

  6. java贪心算法几个经典例子_经典算法思想5——贪心(greedy algorithm)

    贪心算法,是指在对问题求解时,总是做出再当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是某种意义上的局部最优解. 贪心算法没有固定算法框架,算法设计的关键是贪心策略的选择.必须注 ...

  7. java 贪心算法思路,贪心算法之——黑白点的匹配(两种实现方法),贪心算法...

    贪心算法之--黑白点的匹配(两种实现方法),贪心算法 一.题目 设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示.一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当x ...

  8. 贪心算法——找零钱问题

    假设有数目不限的面值为20,10,5,1的硬币. 给出需要找零数,求出找零方案,要求:使用数目最少的硬币. 对于此类问题,贪心算法采取的方式是找钱时,总是选取可供找钱的硬币的最大值.比如,需要找钱数为 ...

  9. Java 贪心算法 活动安排问题

    import org.junit.Test;/*** @auther qwh* @create 2022-11-21-21:39*/ public class test1 {public void s ...

  10. 2021-03-04贪心算法——换啤酒问题(关于能不能赊账)

    摘要: 三种喝啤酒的问法 问题简述: 1. 有多少钱喝多少啤酒,多买多送,但是瓶盖不能兑换 2. 给定有几瓶酒,喝完后瓶盖可以兑换,但是不赊账 3. 给定有几瓶酒,喝完后瓶盖可以兑换,但是赊账 算法分 ...

最新文章

  1. c语言实现数码管显示qq号,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  2. 老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现
  3. 强行分类提取特征自编码网络例4
  4. hdu4907 水dp 或者set
  5. IDEA+Maven运行调试MapReduce程序
  6. 12伏的蓄电池有几个单格组成_福建汤浅蓄电池ups电源机房一体化
  7. linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操
  8. Mysql修改数据库密码的几种方法
  9. MATLAB 出一张好看的图
  10. 对计算机专业来说学历真的重要吗?
  11. JQ6500语音模块
  12. 树莓派系统备份与还原
  13. iOS app上架app store流程详解
  14. 如何培养卓越的执行力
  15. iOS UIFont原生字体和第三方字体.ttf的使用
  16. 测试是ufs3.0的软件,可怕!UFS 3.0测试首曝光:速度竟是UFS 2.1的3倍
  17. 微信开发者工具首次登陆提示网络连接失败
  18. 7-1 用格里高利公式求给定精度的PI值 (15分)
  19. 华为Freebuds Pro 2开启智能高清L2HC后音质差,试试LDAC~
  20. 云电视和智能电视是什么,之间有什么区别?

热门文章

  1. 3DsMAX 单独导出一个对象到UE
  2. 关于表单form元素中onsubmit事件处理机制的认识
  3. popper.min.js.map
  4. 【笔记分享】直流5V升12V - 开关电源BOOST升压原理
  5. 相见恨晚的68句话——每句话可以品半辈子,你有同感吗?
  6. Generic Webhook Trigger 远程触发
  7. 虚拟的大战,真实的恐惧:《世界大战》观后
  8. ... cannot be translated into a null value due to being declared as a primitive type 解决方法
  9. Optional int parameter ‘XXX‘ is present but cannot be translated into a null value问题
  10. WPF 调用API修改窗体风格实现真正的无边框窗体