algorithm - 如何生成总和等于N的连续序列

标签 algorithm math

<分区>

给定一个数字 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

最佳答案

  1. 从 sum = 0 开始。

  2. 设 1 为当前数字。

  3. 将当前数字加到总和中。

  4. 如果 sum > N , 从加到总和中的第一个数字中减去数字,直到 sum <= N .

  5. 如果 sum = N 则停止(成功)。

  6. 增加当前数量。

  7. 从第 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/

相关文章:

java - 以下语法正确吗?

python - 我应该如何调用在主函数之外定义的函数?

algorithm - 内存寻址方法为对应于 'nCk' 值组合的值分配内存(静态硬件)从 0 到 n-1

arrays - 查找在线性时间内出现超过 n/4 次的所有元素

javascript - Math.cos 不准确

c++ - 2D FFT将两个矩阵都转换为FFT格式后该怎么办?

c++ - 多维边界框碰撞检测

c# - 为什么将此代码片段从 C# 转换为 C++ 会降低性能?

math - float 学有问题吗?

vb.net - 三次贝塞尔曲线-给定X可获得Y