我刚学java没多久,而且数学很一般......
题目是: 给定大于0的整数n,要求输出由 1元、2元和5元纸币组成的n元钱的所有方案 . ...要有解题的思路和相应的代码(希望有注释)....用递归方法..我数学不太好...汉诺塔问题都没有完全理解..希望讲的详细些 ....
当然,不用递归也行, 给出思路和代码... ..
求给位大神指点一下 ...
题目是: 给定大于0的整数n,要求输出由 1元、2元和5元纸币组成的n元钱的所有方案 . ...要有解题的思路和相应的代码(希望有注释)....用递归方法..我数学不太好...汉诺塔问题都没有完全理解..希望讲的详细些 ....
当然,不用递归也行, 给出思路和代码... ..
求给位大神指点一下 ...
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);
}
}
}
}
}
}
递归的话搞个简单的,就拿获取文件夹中的文件为例吧,
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搜索一下递归的例子。
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);
}不用每次都循环整个吧?递归应该怎么做呢?
先算出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);
}
}
}
}
自己先思考尝试做做 稍后给你代码看看
n元由1、2、5元组成...X++,Y++,肯定会出现不是题目要的组合....而且主要思路不对,这不是求解三元一次方程....
这是代码...思路下面有回复....这道题我主要是想熟悉下递归的问题 ...
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]+"|");
}
}
}
http://bbs.csdn.net/topics/390415529
参考6楼的回复,还可以兼容负数;不过,算法用的广度搜索思想,是非递归的;如果想改成递归,只需对解空间进行深度优先搜索。
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);
}
}