Ruby中的Project Euler 6(有什么区别?)
我用两种不同的方法为ProjectEuler解出了#6,但第二种方法恰好是巧合。我真的不明白为什么我不必像我的第一个方法那样返回新和的平方。有人知道这两者的主要区别吗Ruby中的Project Euler 6(有什么区别?),ruby,algorithm,math,Ruby,Algorithm,Math,我用两种不同的方法为ProjectEuler解出了#6,但第二种方法恰好是巧合。我真的不明白为什么我不必像我的第一个方法那样返回新和的平方。有人知道这两者的主要区别吗 def square_difference(num) new_sum = 0 sum = 0 while num >= 1 sum += num**2 && new_sum += num num -= 1 end return new_sum**2 - sum end 及
def square_difference(num)
new_sum = 0
sum = 0
while num >= 1
sum += num**2 && new_sum += num
num -= 1
end
return new_sum**2 - sum
end
及
&&
的优先级高于+=
的优先级。所以这些表达:
sum += num**2 && new_sum += num
new_sum += num && sum += num**2
不要像你期望的那样工作。第一个恰好提供了看似“正确”的结果
把它们分成几行,你就会看到区别。或者,至少使用
和而不是&
<代码>和
的优先级低于+=
的优先级&&
的优先级高于+=
。所以这些表达:
sum += num**2 && new_sum += num
new_sum += num && sum += num**2
不要像你期望的那样工作。第一个恰好提供了看似“正确”的结果
把它们分成几行,你就会看到区别。或者,至少使用和而不是&
<代码>和
的优先级低于+=
的优先级&&
的优先级高于+=
。所以这些表达:
sum += num**2 && new_sum += num
new_sum += num && sum += num**2
不要像你期望的那样工作。第一个恰好提供了看似“正确”的结果
把它们分成几行,你就会看到区别。或者,至少使用和而不是&
<代码>和
的优先级低于+=
的优先级&&
的优先级高于+=
。所以这些表达:
sum += num**2 && new_sum += num
new_sum += num && sum += num**2
不要像你期望的那样工作。第一个恰好提供了看似“正确”的结果
把它们分成几行,你就会看到区别。或者,至少使用和而不是&
和
的优先级低于+=
这两个公式都有相同的细微缺陷。我花了好几次时间来了解发生了什么
从第二个:
[30] pry(main)> square_difference(4)
new_sum: 16, sum: 16, num: 3
new_sum: 41, sum: 25, num: 2
new_sum: 70, sum: 29, num: 1
new_sum: 100, sum: 30, num: 0
=> 70
我们可以看到,new\u sum
似乎没有按预期的方式运行
实际发生的情况是,new\u sum+=num&&sum+=num**2
被求值为new\u sum+=(num&&sum+=num**2)
,然后求值为new\u sum+=(sum+=num**2)
这是&&
运算符的结果,该运算符具有更高的优先级(正如余浩指出的),并返回第一个值,该值确定and条件是否满足
[31] pry(main)> 2 && 2
=> 2
[32] pry(main)> 2 && 4
=> 4
[33] pry(main)> 4 && 2
=> 2
[34] pry(main)> nil && 2
=> nil
[35] pry(main)> 2 && nil
=> nil
两个公式都有相同的细微缺陷。我花了好几次时间来了解发生了什么
从第二个:
[30] pry(main)> square_difference(4)
new_sum: 16, sum: 16, num: 3
new_sum: 41, sum: 25, num: 2
new_sum: 70, sum: 29, num: 1
new_sum: 100, sum: 30, num: 0
=> 70
我们可以看到,new\u sum
似乎没有按预期的方式运行
实际发生的情况是,new\u sum+=num&&sum+=num**2
被求值为new\u sum+=(num&&sum+=num**2)
,然后求值为new\u sum+=(sum+=num**2)
这是&&
运算符的结果,该运算符具有更高的优先级(正如余浩指出的),并返回第一个值,该值确定and条件是否满足
[31] pry(main)> 2 && 2
=> 2
[32] pry(main)> 2 && 4
=> 4
[33] pry(main)> 4 && 2
=> 2
[34] pry(main)> nil && 2
=> nil
[35] pry(main)> 2 && nil
=> nil
两个公式都有相同的细微缺陷。我花了好几次时间来了解发生了什么
从第二个:
[30] pry(main)> square_difference(4)
new_sum: 16, sum: 16, num: 3
new_sum: 41, sum: 25, num: 2
new_sum: 70, sum: 29, num: 1
new_sum: 100, sum: 30, num: 0
=> 70
我们可以看到,new\u sum
似乎没有按预期的方式运行
实际发生的情况是,new\u sum+=num&&sum+=num**2
被求值为new\u sum+=(num&&sum+=num**2)
,然后求值为new\u sum+=(sum+=num**2)
这是&&
运算符的结果,该运算符具有更高的优先级(正如余浩指出的),并返回第一个值,该值确定and条件是否满足
[31] pry(main)> 2 && 2
=> 2
[32] pry(main)> 2 && 4
=> 4
[33] pry(main)> 4 && 2
=> 2
[34] pry(main)> nil && 2
=> nil
[35] pry(main)> 2 && nil
=> nil
两个公式都有相同的细微缺陷。我花了好几次时间来了解发生了什么
从第二个:
[30] pry(main)> square_difference(4)
new_sum: 16, sum: 16, num: 3
new_sum: 41, sum: 25, num: 2
new_sum: 70, sum: 29, num: 1
new_sum: 100, sum: 30, num: 0
=> 70
我们可以看到,new\u sum
似乎没有按预期的方式运行
实际发生的情况是,new\u sum+=num&&sum+=num**2
被求值为new\u sum+=(num&&sum+=num**2)
,然后求值为new\u sum+=(sum+=num**2)
这是&&
运算符的结果,该运算符具有更高的优先级(正如余浩指出的),并返回第一个值,该值确定and条件是否满足
[31] pry(main)> 2 && 2
=> 2
[32] pry(main)> 2 && 4
=> 4
[33] pry(main)> 4 && 2
=> 2
[34] pry(main)> nil && 2
=> nil
[35] pry(main)> 2 && nil
=> nil
我预计否决票和投票结束是因为你还没有告诉读者“6为欧拉计划”是什么。我建议你编辑并用文字解释问题所在。还可以给出一个具有预期输出的简单数值示例。一旦读者理解了你想要实现的目标,分析你提出的两种方法应该是相当简单的;sum,sum_sq=(1..num).reduce([0,0]){(sum,sum_sq),n |[sum+n,sum_sq+n*n]};sum*sum-sum_sq#=>170
。我预计否决票和投票将结束,因为你还没有告诉读者什么是“#6 for Project Euler”。我建议你编辑并用文字解释问题所在。还可以给出一个具有预期输出的简单数值示例。一旦读者理解了你想要实现的目标,分析你提出的两种方法应该是相当简单的;sum,sum_sq=(1..num).reduce([0,0]){(sum,sum_sq),n |[sum+n,sum_sq+n*n]};sum*sum-sum_sq#=>170
。我预计否决票和投票将结束,因为你还没有告诉读者什么是“#6 for Project Euler”。我建议你编辑并用文字解释问题所在。这将有助于给出一个简单的数值例子