【发布时间】:2011-02-25 17:36:29
【问题描述】:
我有一个我不知道的任务,任何指针将不胜感激,它是这样的:
有一系列灯泡表示为真/假数组,每个灯泡都有一个开关,通过单击任何灯泡的开关,您可以切换它以及 2 个相邻的灯泡(左起 1 个,另一个 1从右边开始;如果在边缘单击开关的灯泡——当然只有 1 个相邻的开关)。
需要完成的是一种方法,该方法接受一系列打开/关闭的灯泡阵列和另一个表示假设在单击某些开关后的第一个阵列的另一种状态的方法。 .! 因此必须使用递归来找出是否存在将数组 1 转换为数组 2 的开关单击组合。
这是方法的签名:
public static boolean disco(boolean[] init, boolean[] target)
如果数组 init 可以转换为 target,则返回 true,否则返回 false。 方法必须是静态的,不能使用 循环 和任何其他静态和全局变量,只能使用本地变量。
例子:
boolean[] init = {true, false, true, false, true, false};
boolean[] target = {false, true, false, true, false, true};
对于以上 2 个数组,disco(init, target) 将返回 true,因为切换第 1 个和第 4 个灯泡会产生目标状态(记住相邻的灯泡也会被切换)。
【问题讨论】:
-
不要只发布作业,告诉我们您尝试过什么或正在考虑采用什么方法。我们不是作业完成引擎。
-
如果这是作业,请添加
homework标签。 -
我想如果您仅切换第一个和第二个灯泡,即如果一个相邻的灯泡不可用,则没有环绕或类似的东西。对吗?
-
由于两侧相邻的灯泡也被切换,我猜不是所有的灯泡都需要切换,但只有 1+3n。换句话说,每个灯泡都有两个相邻的灯泡(即不是第一个和最后一个)和相邻灯泡不是另一个灯泡的相邻灯泡的灯泡......哈哈。我尝试切换给定示例中的每个灯泡,但没有给出正确的结果。
-
另外,对于达到基本情况,分配中给出的签名没有用于保存当前索引的参数,我想到了两种方法:每次传递一个新的较小的 init 数组和检查它的长度是否为 1... 等等,但我需要完整的 init 数组来品尝所有值,不是吗?其他方法是使用所需参数重载方法。你怎么看?我想我错过了这里的重点......>_>
标签: java arrays algorithm recursion