美文网首页
找零钱问题

找零钱问题

作者: Stroman | 来源:发表于2018-03-25 09:45 被阅读174次

    问题

    这个题目要求编写一段程序实现统一银座超市的找零方案。只需输入要补给顾客的 金额,然后通过程序就可以计算出该金额可由哪些面额的人民币组成。

    思路

    人民的面额总共有(第五套)100、50、20、10、5、1、0.5、0.1、0.05、0.02、0.01等11种面额,本问题依旧采用贪心算法思想来解决。即,先用大面额找零,大面额找不了,换更小的面额,直到找零完毕。

    使用

    package com.company;
    
    public class Main {
    
        public static void main(String[] args) {
        // write your code here
            Solution.gainCharge(503.94);
        }
    }
    
    

    输出

    100.0元 5张
    1.0元 3张
    0.5元 1张
    0.1元 4张
    0.02元 1张
    0.01元 1张
    
    Process finished with exit code 0
    

    实现

    package com.company;
    
    import java.math.BigDecimal;
    
    public class Solution {
        /**
         * 用贪心算法实现找零问题
         * @param money
         */
        static public void gainCharge(double money) {
            final double[] denomination = {100,50,20,10,5,1,0.5,0.1,0.05,0.02,0.01};
            if (!Solution.isValidateMoney(money)) {
                System.out.println("这不是钱币金额!");
                return;
            }
            double copiedMoney = money;
            for (int counter = 0;counter < denomination.length;counter++) {
                if (copiedMoney == 0)break;
                if (denomination[counter] > copiedMoney)continue;
                int moneyCounter = 0;
                while (copiedMoney >= denomination[counter]) {
                    moneyCounter++;
                    copiedMoney -= denomination[counter];
                }
                System.out.println(denomination[counter] + "元 " + moneyCounter + "张");
            }
        }
    
        /**
         * 检查是否是人民币的金额
         * @param money
         * @return
         */
        static private boolean isValidateMoney(double money) {
            if (money < 0)return false;
            double enlargedMoney = money * 100;
            long longMoney = (long) enlargedMoney;
            if (enlargedMoney - longMoney > 0)return false;
            return true;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:找零钱问题

          本文链接:https://www.haomeiwen.com/subject/tulhcftx.html