计算一元钱硬币有多少种表达方式。例如,可以使用1元钱完成,也可以使用两个5角完成。这里可供选择的货币单位从1分到1元。编写程序计算出每一种组合方式。  谢谢啊!!!!

解决方案 »

  1.   

    简单写了下,大多代码都是在排版...囧因为组合的可能性过多..一共4563种,所以在控制台是看不全的,如果真想看全部的,写进文件吧...
    import java.util.ArrayList;
    /*
     * 一元钱硬币有多少种表达方式 
     * 可供选择:1分,2分,5分,1角,2角,5角,1元
     * 如:
     * 1元=1元;
     * 1元=5角+5角;
     * .... 
     */
    public class Test {
    private static int count;
    public static void main(String args[]){
    int max = 100;//一元
    int[] cents = {100,50,20,10,5,2,1};//币值
    String[] money = {"1元","5角","2角","1角","5分","2分","1分"};
    ArrayList collect = new ArrayList();
    collectMoney(cents, money,0, max, 0, collect);
    System.out.println("总共有"+count+"种搭配方法!");

    }
    public static void collectMoney(int[] cents,String[] money,int beginIndex,int max,int result,ArrayList collect){
    if(result>=max){
    if(result==max){
    count++;
    System.out.print("1元=");
    for(int i=0;i<collect.size();i++){
    System.out.print(money[(Integer) collect.get(i)]);
    if(i<collect.size()-1){
    System.out.print("+");
    }
    }
    System.out.println();
    }
    return;
    }
    for(int i=beginIndex;i<cents.length;i++){
    int cent = cents[i];
    collect.add(i);
    collectMoney(cents, money,i, max, result+cent, collect);
    collect.remove(Integer.valueOf(i));
    }
    }
    }
    输出结果:(省略大部分)
    1元=1元
    1元=5角+5角
    1元=5角+2角+2角+1角
    1元=5角+2角+2角+5分+5分
    1元=5角+2角+2角+5分+2分+2分+1分
    1元=5角+2角+2角+5分+2分+1分+1分+1分
    1元=5角+2角+2角+5分+1分+1分+1分+1分+1分
    1元=5角+2角+2角+2分+2分+2分+2分+2分
    ........
    总共有4563种搭配方法!
      

  2.   

    给个类似的你可以参考下自己改写//100元的各种零钱
    public class DecNum { private static int count = 0;

    public static void main(String[] args) {
    printHowToDivide(100);
    System.out.printf("共有 %d 种分法",count);
    } public static void printHowToDivide(int value) {
    int temp = value;
    int five = temp / 5;
    temp %= 5;
    int two = temp / 2;
    temp %= 2;
    int one = temp;
    printHowToDivide(value, five, two, one);
    } /*
     * value为需要分解的钱,num_five, num_two, num_one 分别为当前的 5 2 1块的张数
     * 
     */
    private static void printHowToDivide(int value, int num_five, int num_two,
    int num_one) {
    count++;
    System.out.printf(
    " %d 块钱有如下分法: %d 张 5 元,%d 张 2 元,%d 张 1 元\n", value, num_five,
    num_two, num_one);
    if (num_one == value)
    return;
    if (num_two > 0) {
    printHowToDivide(value, num_five, num_two - 1, num_one + 2);
    } else if (num_five > 0) {
    printHowToDivide(value, num_five - 1, num_two + (num_one + 5) / 2,
    (num_one + 5) % 2);
    }
    }
    }