Java 用递归方法找出所有改变€;5张钞票?
我遇到了一个问题,那就是如何找到所有可能的组合来兑换一张5欧元的钞票。我写了一个程序,它不能得到正确的组合数 我的方法受到以下方面的启发: 500可分为200、200和100。 200可分为100和100。 100可分为50和50 在我编写代码之后,我意识到100也可以分为5到20。我知道这是一个错误,但我不知道如何使用我的方法修复 我的方法是递归的,如下所示,它只检查第一个数字,并相应地对其进行除法 以下是我尝试过的:Java 用递归方法找出所有改变€;5张钞票?,java,combinations,Java,Combinations,我遇到了一个问题,那就是如何找到所有可能的组合来兑换一张5欧元的钞票。我写了一个程序,它不能得到正确的组合数 我的方法受到以下方面的启发: 500可分为200、200和100。 200可分为100和100。 100可分为50和50 在我编写代码之后,我意识到100也可以分为5到20。我知道这是一个错误,但我不知道如何使用我的方法修复 我的方法是递归的,如下所示,它只检查第一个数字,并相应地对其进行除法 以下是我尝试过的: public class Q1 { public static
public class Q1 {
public static int counter;
public static void main(String[] args) {
divide(500);
System.out.println(counter);
}
private static void divide(int x) {
System.out.println("Dividing " + x);
if(x == 1) {
return;
}
counter++;
int length = String.valueOf(x).length();
int fd = Integer.parseInt(Integer.toString(x).substring(0, 1));
String zeros;
if(fd != 1) {
zeros = Integer.toString(x).substring(1, length);
}else {
zeros = Integer.toString(x).substring(1, length-1);
}
if(fd == 5) {
divide(Integer.parseInt(2 + "" + zeros));
divide(Integer.parseInt(2 + "" + zeros));
divide(Integer.parseInt(1 + "" + zeros));
}else if(fd == 2) {
divide(Integer.parseInt(1 + "" + zeros));
divide(Integer.parseInt(1 + "" + zeros));
}else if(fd == 1) {
divide(Integer.parseInt(5 + "" + zeros));
divide(Integer.parseInt(5 + "" + zeros));
}
}
}
例如,使用上面的程序会出现错误
10=2+2+2+2+2
我知道已经存在可行的解决方案,但如果可能,我希望保持我的方法
使用该程序找出500美分的组合结果388种方式,其中正确答案为6295435。有人告诉我,除了上面的例子之外,我忘记了其他一些东西。这里有一些提示,说明为什么你打错了号码: 确定所有可能性的正确方法
为了简单起见,尝试拆分5而不是500。请注意,有4种可能性,即5种=
使用10除法示例编写的代码如下所示:
- 10次
- 5+5一次
- 5+2+2+1两次
- 5+2+1+1+1两次
- 5+1+1+1+1+1+1两次
假设这个问题可以通过这样的方法解决: 10=5+5->评估前5个,然后评估后5个 这是错误的,因为在这两种情况下,这会导致分布为10=5+评估为5,仅计算在最终分布为10中至少包含一个5的选项(当不评估没有5的分布时,将其计算多次)
另一个错误是,代码说在实际存在1(1=1)的情况下,不可能存在1的分布。 此外,这个问题还不清楚
- x能等于所有可能的整数吗?->4在代码中不能拆分为2+2
- 1+1+2与1+2+1和2+1+1是不同的解决方案吗
保持递归方法只能通过一些重要的更改来完成。一种可能的方法如上所述