gpt4 book ai didi

ruby - Find the odd int - Ruby 嵌套循环错误

转载 作者:数据小太阳 更新时间:2023-10-29 07:58:17 25 4
gpt4 key购买 nike

我在 codewars 上做这个问题:“给定一个数组,找到出现奇数次的整数。总是只有一个整数出现奇数次。”

代码:

def find_it(seq)
int = []
for a in seq do
count = 0
for b in seq do
if a == b
count += 1
end
end
if count % 2.0 != 0
int << b
end
end
puts int.uniq[0].to_i
end

它针对几个输入进行了测试,但是这两个数组的答案是错误的:

find_it([1,1,2,-2,5,2,4,4,-1,-2,5]) - 返回 5 而不是 -1

find_it([1,1,1,1,1,1,10,1,1,1,1]) - 返回 1 而不是 10

我的代码出了什么问题?

最佳答案

if count % 2.0 != 0
int << b
end

你在这里遇到的问题是你将 b 而不是 a 插入整数数组,所以发生的事情是你插入了 b 的最后一个值,而不是你计算的值被插入了最后一个值数组中的元素只要counter是奇数这个条件就不管了,虽然b和counter没有任何关系。所以要修复它,您将 b 替换为 a,以便它插入您正在测试的值,与第二个循环中的其他元素进行比较

修复:

if count % 2.0 != 0
int << a
end

一个类似但更简单的代码,除了以更短和更易于理解的方式完成类似的工作是:

def find_it(seq)
numberWithOddCount = 0
seq.each do |currentElement|
counter = 0
seq.each { |elementToCompare| counter += 1 if currentElement == elementToCompare}
numberWithOddCount = currentElement if counter % 2 != 0
end
numberWithOddCount
end

刚刚添加了一些您也可以用来缩短和简化代码的花絮。

编码愉快!

注意:

您可以创造性地利用内置的 ruby​​ 方法,使代码在很少的几行(甚至一行)内完成您想要的操作,例如@iGian 在问题评论中所做的,但是如果您对 ruby​​ 还是个新手,那么学习这些方法时最好一个一个地使用它们,否则你会感到困惑。但是如果你现在愿意花时间学习它们,我建议你拿他的代码并将每个方法执行分成单独的行并输出每个方法做了什么以了解什么在做什么。并练习分别使用它们。

关于ruby - Find the odd int - Ruby 嵌套循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com