Ruby on rails 在ruby中,如何确定任何给定的连续数组元素之和是否等于给定的数字?
我正在尝试一个编码问题,它要求我在任何连续数组数的和等于给定数时打印“是”,如果没有,则打印“否” 问题是: Prateek想在他的生日那天为他的N个朋友举办一个聚会,每个朋友的编号从1到N。他的朋友要求送一份礼物来参加聚会,而不是送他一份。礼物的成本在数组值中给出,在数组值中,ith friend要求礼物的成本为i 但是,Prateek只有X笔钱可以花在礼物上,他想邀请他的朋友,这些朋友的礼物的总成本将恰好等于X 如果他可以邀请满足上述条件的朋友,则打印“是”,否则打印“否” 输入: 第一行包含一个整数T,表示测试用例的数量。在每个测试用例中,都会出现以下输入:-下一行包含两个空格分隔的整数N和X,其中N表示朋友的数量,X表示Prateek可以花在礼物上的金额。 -下一个N行包含N个整数,其中第i行包含第i个整数,它表示成本i 输出 精确输出T行,每行包含对应测试用例的答案 限制条件:Ruby on rails 在ruby中,如何确定任何给定的连续数组元素之和是否等于给定的数字?,ruby-on-rails,arrays,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Arrays,Ruby,Ruby On Rails 3,Ruby On Rails 4,我正在尝试一个编码问题,它要求我在任何连续数组数的和等于给定数时打印“是”,如果没有,则打印“否” 问题是: Prateek想在他的生日那天为他的N个朋友举办一个聚会,每个朋友的编号从1到N。他的朋友要求送一份礼物来参加聚会,而不是送他一份。礼物的成本在数组值中给出,在数组值中,ith friend要求礼物的成本为i 但是,Prateek只有X笔钱可以花在礼物上,他想邀请他的朋友,这些朋友的礼物的总成本将恰好等于X 如果他可以邀请满足上述条件的朋友,则打印“是”,否则打印“否” 输入: 第一行包
1 <= T <= 10
1 <= N , Costi <= 106
1 <= X <= 1012
样本输出
对
解释
在样本输入中,T等于1。因此,相应地,在下一行中,N和X的值分别为5和12。在接下来的5行中,你有我朋友问的costi。当朋友的数量从2到4(包括)时,礼物的价值是{3,4,5},它们的总和等于12,也就是给定的X值。所以,答案是肯定的
我的解决方案就在这里
b = Array.new
a = Array.new
t = gets.to_i
if t >= 0 && t <= 10
t.times do
n, x = gets.chomp.split.map(&:to_i)
n.times do
a << gets.to_i
end
(1..a.length).each do |num|
a.each_cons(num).each do |pair|
if pair.inject(:+) == x
b << "YES"
else
b << "NO"
end
end
end
if b.include?("YES")
puts "YES"
else
puts "NO"
end
end
end
b=Array.new
a=数组。新
t=get.to_i
如果t>=0&&t我建议您将答案分成几个部分:
从用户处读取输入
确定数组是否包含与给定数字求和的连续子数组
打印是
或否
您的代码很难阅读,因为所有这些职责相互交织。第2点至关重要。为了很好地处理第1点和第3点,可以使用一个函数来解决这个问题,该函数接受一个数字数组和所需的和作为参数,如果有一个具有所需和的连续子数组,则返回true
,否则返回false
最简单的算法查看所有子阵列,计算它们的和,并与所需的和进行比较
def consecutive_sum?(array, sum)
(0...array.size).each do |start|
(start...array.size).each do |stop|
return true if array[start..stop].inject(&:+) == sum
end
end
false
end
start
和stop
标记子阵列的开始和结束<代码>数组#注入
用于计算子数组的和
我将把第1点和第3点留给您。我建议您将答案分成几个部分:
是
或否
true
,否则返回false
最简单的算法查看所有子阵列,计算它们的和,并与所需的和进行比较
def consecutive_sum?(array, sum)
(0...array.size).each do |start|
(start...array.size).each do |stop|
return true if array[start..stop].inject(&:+) == sum
end
end
false
end
start
和stop
标记子阵列的开始和结束<代码>数组#注入用于计算子数组的和
我将把第1点和第3点留给您。看一下:
或者当您想返回“是”或“否”时:
array.each_cons(2).any? { |pair| pair.inject(:+) == number } ? 'YES' : 'NO'
看看:
或者当您想返回“是”或“否”时:
array.each_cons(2).any? { |pair| pair.inject(:+) == number } ? 'YES' : 'NO'
你的链接只是显示了一个登录页面。@JörgWMittag哦,是的。。很抱歉。。我想你必须登录才能看到挑战。我会发布整个问题。这不是Ruby问题,这是作业问题-你不应该在这里问这样的问题@Wand Maker我以为堆栈溢出是为了帮助人们获得解决方案,学习,复习并理解代码。如何尝试找出一个能帮助我学习任何不同知识的作业问题的解决方案?回复:“它不能通过所有测试用例”。哪些测试用例失败了?你的链接只是显示了一个登录页面。@JörgWMittag哦,是的。。对此很抱歉。。我想你必须登录才能看到挑战。我将发布整个问题这不是Ruby问题,这是一个分配问题-你不应该在这里问这样的问题@Wand Maker我以为堆栈溢出是为了帮助人们获得解决方案,学习,复习并理解代码。如何尝试找出一个能帮助我学习任何不同知识的作业问题的解决方案?回复:“它不能通过所有测试用例”。哪些测试用例失败了?