<分区>
给定一个数字 N 并生成一个差为 1 的算术级数,以便在对有限元求和后得出数字 N 例如:
For Example:
N=10
1 + 2 + 3 + 4 =10
N=20
2+3+4+5+6 = 20
N=30
4+5+6+7+8 = 30
N < 1000000
<分区>
给定一个数字 N 并生成一个差为 1 的算术级数,以便在对有限元求和后得出数字 N 例如:
For Example:
N=10
1 + 2 + 3 + 4 =10
N=20
2+3+4+5+6 = 20
N=30
4+5+6+7+8 = 30
N < 1000000
最佳答案
从 sum = 0 开始。
设 1 为当前数字。
将当前数字加到总和中。
如果 sum > N
, 从加到总和中的第一个数字中减去数字,直到 sum <= N
.
如果 sum = N
则停止(成功)。
增加当前数量。
从第 3 步继续。
您只需要记住第 4 步加到总和中的第一个数字,当您从总和中减去它时,它会增加一个(感谢 Niko)。
作为优化,您还可以使用 a formula ( n(n+1)/2
)批量添加数字而不是一个一个地添加(以防 N
很大)。
示例:
N = 30
Sum = 0
Add 1 -> 1
Add 2 -> 3
Add 3 -> 6
Add 4 -> 10
Add 5 -> 15
Add 6 -> 21
Add 7 -> 28
Add 8 -> 36
36 > 30, so:
Subtract 1 -> 35
Subtract 2 -> 33
Subtract 3 -> 30
Done.
关于algorithm - 如何生成总和等于N的连续序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050598/