【发布时间】:2019-10-23 10:48:11
【问题描述】:
我遇到了一个问题,即要找到所有可能的组合来更改 5 欧元纸币。我编写的程序未能产生正确数量的组合。
我的方法受到以下启发:
500可以分为200、200和100。 200可以分为100和100。 100可以分为50和50。
写完代码后,我意识到 100 也可以分为 5 个 20。这是我知道的一个错误,但我不知道如何使用我的方法来修复。
我的方法是一种递归方法,如下所示,它只是检查第一个数字并进行相应的除法。
这是我尝试过的:
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
我知道like this one 已经存在可行的解决方案,但如果可能,我想保持我的方法。
使用该程序找出 500 美分的组合结果 388 种方式,其中正确答案是 6295435。有些东西告诉我,除了上面的例子之外,我忘记了其他东西。
【问题讨论】:
标签: java combinations