硬币问题

2018-06-12  本文已影响0人  nafoahnaw
/**
 * 有1,5,10,50,100,500元的硬币各C1,C5,C10,C50,C100,C500枚
 * 现在要用这些硬币来支付A元,最少需要多少枚硬币?
 * 假定本题至少存在一种解决方案
 * 思路,贪心算法
 * @author haofan.whf
 * @version $Id: Coin.java, v 0.1 2018年06月12日 下午5:13 haofan.whf Exp $
 */
public class Coin {

    public void solution(int A, int C1, int C5, int C10, int C50, int C100, int C500){
        int nc500 = 0;
        if(A / 500 > 0){
            nc500 = A / 500 > C500 ? C500 : A / 500;
            System.out.println("需要500元硬币" + nc500 + "枚");
            A = A - nc500 * 500;
        }
        int nc100 = 0;
        if(A / 100 > 0){
            nc100 = A / 100 > C100 ? C100 : A / 100;
            System.out.println("需要100元硬币" + nc100 + "枚");
            A = A - nc100 * 100;
        }
        int nc50 = 0;
        if(A / 50 > 0){
            nc50 = A / 50 > C50 ? C50 : A / 50;
            System.out.println("需要50元硬币" + nc50 + "枚");
            A = A - nc50 * 50;
        }
        int nc10 = 0;
        if(A / 10 > 0){
            nc10 = A / 10 > C10 ? C10 : A / 10;
            System.out.println("需要10元硬币" + nc10 + "枚");
            A = A - nc10 * 10;
        }
        int nc5 = 0;
        if(A / 5 > 0){
            nc5 = A / 5 > C5 ? C5 : A / 5;
            System.out.println("需要5元硬币" + nc5 + "枚");
            A = A - nc5 * 5;
        }
        int nc1 = A;
        System.out.println("需要1元硬币" + nc1 + "枚");
        System.out.println("共需要硬币" + (nc1 + nc5 + nc10 + nc50 + nc100 + nc500) + "枚");
    }

}
上一篇下一篇

猜你喜欢

热点阅读