【问题标题】:Correct interpretation of pseudocode? JAVA伪代码的正确解释? JAVA
【发布时间】:2016-02-13 11:46:43
【问题描述】:

所以我尝试解释一个朋友制作的这个伪代码,但我不确定我的方法是否返回正确的结果。谁能帮帮我?

我已经完成了一些测试用例,例如[2,0,7] 或 [0,1,4] 或 [0, 8, 0] 的数组将返回 true,但不是以下情况:[1,7,7] 或 [2,6,0] .

Array(list, d)
for j = 0 to  d−1 do
for i = 0 to d−1 do
for k = 0 to d−1 do
if list[j] + list[ i] + list[k] = 0 then
return true

end if
end for
end for
end for
return false

我已经用 java 做了这个:

public class One{
    public static boolean method1(ArrayList<String> A, int a){
    for(int i = 0; i < a-1; i++){
        for(int j = 0; j < a-1; j++){
            for(int k = 0; k < a-1; k++){
                if(Integer.parseInt(A.get(i)+A.get(j)+A.get(k)) == 0){
                    return true;
                }
                }
            }
        }
    return false;
}

}

提前致谢

【问题讨论】:

  • 谁是n?! (i &lt; n-1)
  • @fanton 纠正了它
  • 好的,现在我看到你在一大堆东西上调用parseInt 方法。考虑到您有一个表示为字符串的整数列表(有点奇怪),您可能想做Integer.parseInt(A.get(i)) + Integer.parseInt(A.get(j)) + Integer.parseInt(A.get(k)) == 0 而不是您正在做的事情。
  • @fanton 这不会改变任何东西,只是经过测试。
  • 测试用例结果是否符合预期且正确?

标签: arraylist nested-loops pseudocode


【解决方案1】:

要解决您的具体问题,请参阅我的评论。编写该代码的更好方法是实际使用Integer 列表而不是String,因为您随后需要将字符串转换回整数。因此,您的方法看起来更好如下:

public static boolean method(List<Integer> A) {
    for (Integer i : A)
        for (Integer j : A)
            for (Integer k : A)
                if (i + j + k == 0)
                     return true;
   return false;
}

请注意,您甚至不需要将大小作为参数,因为 Java 中的任何 List 都嵌入了自己的大小。

不知何故跑题了

您可能正在尝试解决以下问题:“查找整数列表是否包含 3 个不同且总和为 0 的整数”。这个问题的解决方案不一定非要O(n^3),像你的一样,可以在O(n^2)解决。看到这个post

【讨论】:

  • 它与我的代码略有不同。在 [x,y,0] 为您返回 true 的情况下,它为我返回 false?伪代码想要什么?
  • 伪代码似乎并不关心不同的数字。上面的Java代码都不是。区别在于:如果您有一个包含从 0 到 N 的自然数的数组,您希望您的算法返回 truefalse 吗?
【解决方案2】:

好的,这就是我认为伪代码试图做的事情。如果您的列表中有一个零,或者您的列表中有三个数字加起来为零,则返回 true。因此,对于以下测试用例,它应该返回 true。 (0,1,2,3,4,5), (1,2,3,4,-3)。它将为 (1,2,3,4,5) 返回 false。我只是使用 d=5 作为随机示例。您的代码大部分都很好 - 您只需在列表中添加第 i 个、第 j 个和第 k 个元素,以检查它们的总和是否在真实条件下为零。

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2013-12-20
    相关资源
    最近更新 更多