Honeypot示例测试奇数问题

时间:2018-12-10 12:37:07

标签: java

因此,Honeypot网站上公开提供了一个样本测试,我对其中的一种测试感到困惑。

  

1 <= l <= r <= 10 ^ 5

l是起始号码

r是结束号码

测试是返回l和r之间的所有奇数,包括恰好是l和r的所有奇数。

这是我在运行的函数中的代码,期望将整数数组列表作为返回值:

    List<Integer> arraylist = new ArrayList<Integer>();

    for (int i = 0; i < r - l + 2; i++) {
        if ((l + i % 2) == 1)
            arraylist.add(l + i);
    }

    return arraylist;

此代码在12个测试用例中通过了8个,在7-10个测试用例中未通过,但未显示失败的测试用例。

我只是对失败的测试案例感到好奇,因为我似乎无法弄清楚。

在什么情况下此代码将无法完成其预定的工作?

谢谢。

3 个答案:

答案 0 :(得分:2)

如果范围开始于w_data(即1),l > 1(其值为(l + i % 2) == 1)为(l + (i % 2)) == 1false仅在(l + (i % 2)) == 1l == 1为偶数时才为真。

您应该使用的是i

此外,循环的条件应为:

((l + i) % 2) == 1

请注意,如果您仅将i < r-l+1 i迭代到l,则代码的可读性会更高(错误的发生率也将更低):

r

答案 1 :(得分:1)

您不必对每个数字都应用%2。请尝试以下:

List<Integer> arraylist = new ArrayList<Integer>();
if(l % 2 == 0) l += 1;
for(int i=l; i<=r; i += 2){
  arraylist.add(i);
}
return arraylist;

答案 2 :(得分:0)

您有两个错误:

  1. (l + i % 2):这将首先计算i % 2,然后将其添加到l,这是错误的
  2. r - l + 2:应更改为r - l + 1

这将帮助您:

for (int i = 0; i < r - l + 1; i++) {
    if (((l + i) % 2) == 1) arraylist.add(l + i);
}