我遇到了一个问题,就是如何找到所有可能的组合来改变一张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
我知道像这样的工作解决方案已经存在,但如果可能的话,我希望保持我的方法。
使用该程序找出500美分的组合结果388种方式,其中正确答案为6295435。有些东西告诉我,除了上面的例子,我忘记了其他的东西。
以下是一些关于为什么你会得到错误号码的提示:
为了简单起见,尝试拆分5而不是500。请注意,有4种可能性,即5种=
现在尝试将10除以500。请注意,这可以分为11种不同的方式:10=
此解决方案遵循以下模式:要拆分的数字x已经是答案。通过将其中一个数字拆分为尽可能多的次大数字,将最低数字的数量减少1。总是忽略那些。如果只剩下一个(或多个)数字,请将x拆分为尽可能多的下一个最低数字,然后继续。
例如,x=10。那么:10是最低的数字-
这可以通过递归方法完成。
使用除以10的示例编写的代码如下:
给它7种可能性的总分。尝试将这7种可能性映射到上面的11种可能性,你可以数到10=
并且错过了其他6个选项。
所以假设这个问题可以通过这样的方法来解决:
10 = 5 5 -
是错误的,因为在这两种情况下,这都会导致10=5的分布(5的评估),只计算10的最终分布中至少包含一个5的选项(多次计数,而没有5的分布不会被评估)。
另一个错误是,代码说在实际存在1(1=1)的情况下,不可能存在1的分布。此外,这个问题还不清楚
(我还没有名声在评论中问这个问题)。
保留递归方法只能通过一些重大更改来完成。一种可能的方法如上所述。
我有两个非递归方法,其中一个读取字符串中的总“e”字符,另一个检查 ArrayList 是否按字母顺序排列。 递归方法的定义是方法调用自身。我相信我理解这个概念,但要实现它或将其转换为递归方法确实很困难。我怎样才能将这些方法转化为递归方法,同时我应该如何思考?此外,这是我的另一种方法,它只打印出指定数字大小的数字。 条件方法检查数字的第一个数字(从右起)是否大于第二个数字,并再次检查第二个是否大于
我正在处理我当前的任务,即创建一个LinkedList数据结构,我已经创建了它以及其他方法,它工作得非常好。我正在处理我的最后一个问题,即制作一个toString方法。它应该: toString方法返回列表的字符串表示形式。用逗号分隔每个项目,并用大括号括住这些项目,例如{1,4,7,5}。公共toString方法必须调用私有递归方法来生成以逗号分隔的项目列表。(但您可以在公共方法中添加大括号。)
我目前面临的问题是,我的代码无法解决peg纸牌板的不同变体。我的测试程序测试了4个简单的可解电路板。(1移动解决方案)向上移动一次,向下移动一次,向左移动一次,向右移动一次。我的代码解决了这些问题,同时测试了一个无法解决的电路板。我面临的问题是如何解决更复杂的问题,比如加号、菱形和标准板。 我不太确定如何将递归添加到这个问题中。我在solveHelp方法调用setupMove的末尾添加了它,但这破
我有一个javascript函数,它接受一个数组,并对该数组的每个项执行另一个函数。有很多重复的部分,所以我假设有一种更简单的递归方式来写这个: null null 数组中的每个项要么是字符串,要么是嵌套数组。字符串不必是唯一的,所以我认为我不能使用object和map()来代替。
我在深度优先搜索算法实现的递归方法方面遇到了一些麻烦。这是二叉树照片: 该方法在树的右侧(55、89、144)工作得很好,但是当它来到左侧时,它返回nil,即使它输入“是”。那么,代码有什么问题呢?节点是Node类的一个实例,它具有值(整数)并链接到左右子级(Node类的其他实例),如果它没有来自该侧的子级,则为nil。 下面是方法代码:
我无法找到此练习的正确解决方案,以下是任务: (数组中指定字符的出现次数)编写一个递归方法,用于查找数组中指定字符的出现次数。您需要定义以下两种方法。第二种是递归助手方法。 公共静态int计数(char[]chars,char ch) 公共静态int计数(char[]chars, char ch, int high) 编写一个测试程序,提示用户输入一行中的字符列表和一个字符,并显示该字符在列表中的