首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蜜罐样本测试奇数问题

蜜罐样本测试奇数问题
EN

Stack Overflow用户
提问于 2018-12-10 12:37:06
回答 3查看 590关注 0票数 2

因此,在蜜罐网站上有一个公开的示例测试,我对其中一个测试感到困惑。

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

我是起始号码

R是结束数

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

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

代码语言:javascript
复制
    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,但它没有显示它失败的测试用例。

我只是对这个失败的测试用例感到好奇,因为我似乎找不出答案。

在什么情况下,这段代码将无法完成它所设定的任务?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-10 12:46:52

你有两个错误:

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

这将帮助你:

代码语言:javascript
复制
for (int i = 0; i < r - l + 1; i++) {
    if (((l + i) % 2) == 1) arraylist.add(l + i);
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-10 12:43:42

您不必在每个数字上应用%2。试着在下面:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-12-10 12:43:49

如果范围在1之后开始(即l > 1),则计算为(l + (i % 2)) == 1(l + i % 2) == 1false(l + (i % 2)) == 1只有在l == 1i是偶数的情况下才能成为真。

您应该使用的是((l + i) % 2) == 1

此外,循环的条件应该是:

代码语言:javascript
复制
i < r-l+1

请注意,如果您只需将il迭代到r,代码的可读性就会高得多(并且容易出错)。

代码语言:javascript
复制
for (int i=l; i<=r; i++){
    if((i%2)==1)
        arraylist.add(i);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53705800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档