Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的Project Euler 6(有什么区别?)_Ruby_Algorithm_Math - Fatal编程技术网

Ruby中的Project Euler 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 及

我用两种不同的方法为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


&&
的优先级高于
+=
的优先级。所以这些表达:

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”。我建议你编辑并用文字解释问题所在。这将有助于给出一个简单的数值例子