我刚学java没多久,而且数学很一般......
  题目是: 给定大于0的整数n,要求输出由 1元、2元和5元纸币组成的n元钱的所有方案 . ...要有解题的思路和相应的代码(希望有注释)....用递归方法..我数学不太好...汉诺塔问题都没有完全理解..希望讲的详细些 ....
  当然,不用递归也行, 给出思路和代码... ..
   求给位大神指点一下 ...

解决方案 »

  1.   

    public class TestMoney {
    public static void main(String[] args) {
    test(10);
    }

    public static void test(int N) {
    for(int x=0; x<=N; x++) {
    for(int y=0; y<=N; y++) {
    for(int z=0; z<N; z++) {
    if((1*x + 2*y + 3*z) == N){
    System.out.println("x:" + x + " y:" +y + " z:" +  z);
    }
    }
    }
    }
    }
    }
      

  2.   

    题意没太看懂,
    递归的话搞个简单的,就拿获取文件夹中的文件为例吧,
    File file = new File("d:")
    File [] fileList = null;public void getAllFile()
    {
      if (file.isDectory())
      {
        fileList = file.list();
        for (int i=0;i<fileList.length;i++)
        {
          getAllFile();
        }
      }
    }简单的写了下,应该有些小问题什么的,不过思路就是这样的,当你满足某一个条件后,就会重复调用同一个方法。
    楼主可以去baidu搜索一下递归的例子。
      

  3.   

    public static void main(String[] args) {
    int num=5;
    int count=0;
    for(int i=0;i<=num;i++){
    for(int j=0;j<=num/2;j++){
    for(int k=0;k<=num/5;k++){
    if((i+2*j+5*k)==num){
    count++;
    System.out.println("1元:"+i+"\t2元:"+j+"\t5元:"+k);
    }
    }
    }
    }
    System.out.println(count);
    }不用每次都循环整个吧?递归应该怎么做呢?
      

  4.   

    思路:
    先算出1元2元5元的极端情况
    1、全是1元 :n/1 = a
    2、全市2元:n/2 = b
    3、全市5元:n/5 = c
    也就是1元在0-a张之间 2元在0-b张之间  5元在0-c张之间
    最后
    for(int i=0;i<=c;i++){
     for(int j=0;j<=b;j++){
      for(int k=0;k<=a;k++){
       if(5*i+2*j+1*k=n){
        system.out.print(i+','+j+','+k);
       }
      }
     }
    }
      

  5.   

    思路:先找出最大的数字,此题中是5元,然后用n除以5元,得到商和余数,for循环,递减这个商,余数作为n递归调用此方法,直到商为0
    自己先思考尝试做做 稍后给你代码看看
      

  6.   

    Quote: 引用 7 楼 fxhbeyond 的回复:

    思路:先找出最大的数字,此题中是5元,然后用n除以5元,得到商和余数,for循环,递减这个商,余数作为n递归调用此方法,直到商为0
    自己先思考尝试做做 稍后给你代码看看[/quote现在才能上网这道题在吃饭的时候重新想了一下用递归的方法做
    应该是这样解: 给出一个整数n,因为n元有1、2、5元组成
    a.我们只要求解出 (n-1)元的组成方法+一元  
    b.我们只要求解出(n-2)元的组成方法+二元
    c.我们只要求解出(n-5)元的组成方法+五元
    n-1,n-2,n-5元都是重复以上步骤,不过要注意重复的组合,当 n=0,也即组成完毕,然后输出组合.
    我的代码是
    package com.ch3;public class J_money {
        private static int[] data={1,2,5};           
    public static void main(String[] args) 

       digui(10,0,"");  
    }     
        public static void digui(int n,int base,String result) { 

         if(n<0) 
           return;        
        if(n==0)
           {    
          System.out.println(result);  
           return;        
            }        
        for(int i=base;i<data.length;i++)  //当base为0时,n由1、2、5组成basen=1时,n由2、5组成 base=5时,n由5组成 
           {  
               digui(n-data[i],i,result+data[i]+"|");   
                }    
         } 
    }
      

  7.   


    n元由1、2、5元组成...X++,Y++,肯定会出现不是题目要的组合....而且主要思路不对,这不是求解三元一次方程....
      

  8.   


    这是代码...思路下面有回复....这道题我主要是想熟悉下递归的问题 ...
    public class J_money {
        private static int[] data={1,2,5};           
    public static void main(String[] args) 

       digui(10,0,"");  
    }     
        public static void digui(int n,int base,String result) { 

         if(n<0) 
           return;        
        if(n==0)
           {    
          System.out.println(result);  
           return;        
            }        
        for(int i=base;i<data.length;i++)  //当base为0时,n由1、2、5组成basen=1时,n由2、5组成 base=5时,n由5组成 
           {  
               digui(n-data[i],i,result+data[i]+"|");   
                }    
         } 
    }
      

  9.   

    如果想选出不重复的组合,请参考:
    http://bbs.csdn.net/topics/390415529
    参考6楼的回复,还可以兼容负数;不过,算法用的广度搜索思想,是非递归的;如果想改成递归,只需对解空间进行深度优先搜索。
      

  10.   

    其实这个题用递归并不是很好,但是能做.
    public class Hello {
        public static void foo(int n) {
            if (n < 1) { return; }        if (n >= 5) {
                System.out.print(5 + ", ");
                foo(n - 5);
            } else if (n >= 2) {
                System.out.print(2 + ", ");
                foo(n - 2);
            } else if (n >= 1) {
                System.out.print(1 + ", ");
                foo(n - 1);
            }
        }    public static void main(String[] args) {
            foo(18);
        }
    }