【问题标题】:While true vs. while (idx+count) < arr.sizewhile true vs. while (idx+count) < arr.size
【发布时间】:2015-07-09 10:13:20
【问题描述】:

我正在学习 Ruby,但遇到了这个问题:

提示:使用 Ruby 语言,让函数 ArrayAdditionI (arr) 获取存储在 arr 中的数字数组,如果数组中的任何数字组合可以相加等于数组中的最大数字,则返回字符串 true , 否则返回字符串 false。例如:如果 arr 包含 [4, 6, 23, 10, 1, 3],则输出应返回 true,因为 4 + 6 + 10 + 3 = 23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。

我的回答如下:

def ArrayAdditionI(arr)
  largest_num = nil
  arr.each do |element|
    if largest_num == nil || element > largest_num
      largest_num = element
    end
  end

arr = arr - [largest_num]
idx=0
count = 1

while (idx+count) < arr.size # <==== this line
    puts idx+count
    puts arr.size
    count = 1
    result = arr[idx]
    while idx + count < arr.size
        if result + arr[idx+count] == largest_num
            return true
        else
            result = result + arr[idx+count]    
        count+=1
        end
    end
    idx+=1
end
false
end

除非我将while (idx+count) &lt; arr.size 行更改为while true,否则代码不会为[3,5,-1,8,12] 返回正确的输出true。否则,我在那个“while”循环中的代码将不会循环。谁能解释为什么?谢谢。

【问题讨论】:

  • 第2-6行可以换成largest_num = arr.max

标签: ruby arrays while-loop


【解决方案1】:

count 在循环内重置为 1,但外部 while 循环在重置之前检查条件,因此在第一次迭代后它始终为 false。

如果您希望旧条件起作用,可以将count = 1 移到idx+=1 行之后。

其他一些输入仍然会返回错误的答案,因为您没有检查每个组合,只检查数组中彼此相邻的数字。

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 2019-02-12
    • 2013-03-02
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多