7

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

4

6 回答 6

7
  1. 从总和 = 0 开始。

  2. 设 1 为当前数字。

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

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

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

  6. 增加当前数量。

  7. 从步骤 3 继续。

您只需要记住第 4 步加到总和中的第一个数字,当您从总和中减去它时,您将加一(感谢 Niko)。

作为优化,你也可以使用公式n(n+1)/2N

例子:

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.
于 2013-09-27T12:26:48.733 回答
5

设 T 为数字

所以 N(N+1)/2 = T 在你的第一种情况下 N=4

N(N+1)/2 - K(K+1)/2 = T 在你的第二种情况下 N=6 & K=1

N(N+1)/2 - K(K+1)/2 = T 在你的第三种情况下 N=8 & K=3

所以你解决 N 基本上就是通过乘法和减少你得到

N^2 + N - (2T + K^2 + K) = 0

对 N 应用二次公式,即 N= (-b + sqrt(b^2 - 4ac))/2a

所以我们得到,N = (-1 +- sqrt(1 + 8T + 4K^2 + 4K))/2

N 必须是正数,所以我们可以删除负数情况

因此 N 必须等于 N = (sqrt(8T + (2k+1)^2) - 1)/2 你可以从 K=0 迭代直到你得到一个自然数 N 这将是你的答案

希望它有所帮助,我正在尝试找到一种更好的方法,因为我正在这样做(欣赏有趣的问题)

于 2013-09-27T12:35:48.650 回答
2

N = pqwherep是一个奇数的正整数并且q是任何正整数。

(1) 你可以写成连续整数N的总和,用作为中间值。pq

(2) 如果pq都是奇数(比如q = 2k+1),你也可以写成N连续2p整数之kk+1,中间有 和。

例如,让N = 15 = 5 x 3.

如果我们选择p=5,则遵循规则 (1) 我们有1+2+3+4+5 = 15。或者根据规则 (2) 我们也可以写(-3)+(-2)+(-1)+0+1+2+3+4+5+6 = 15.

我们也可以选择p = 3get4+5+6 = 150+1+2+3+4+5 = 15too。

于 2013-09-27T13:03:32.577 回答
2
int NumSum(int val)
{
    int n = 0, i = 0, j;
    while (n != val)
    {
        n = 0;
        j = ++i;
        while (n < val)
            n += j++;
    }
    return i;
}

没有花哨的数学,只是简单的方法。返回数字开始计数。

于 2013-09-27T13:08:36.133 回答
1

这更像是一种技巧方法,我认为它可能会起作用。

假设数字是 10,然后从 n/2 开始一个序列,即 5 现在该序列不能

5+6,因为 10>11,所以我们必须向后工作,5 是我们需要考虑的数字的上限,因为像 6+7 等数字将超过 10,所以序列的最后一个数字(最高)将是 5。向后 5+4=9 < 10

5+4+3=12 > 10 所以删除第一个元素有点像队列。

所以对于 20 我们有 start = 20/2 = 10

  1. 10 + 9 = 19 -> 什么都不做
  2. 10 + 9 + 8 = 27 -> 删除第一个元素 10
  3. 9 + 8 + 7 = 24 -> 删除 9
  4. 8 + 7 + 6 = 21 -> 删除 8
  5. 7 + 6 + 5 = 18 -> 什么都不做
  6. 7 + 6 + 5 + 4 = 22 -> 删除 7
  7. 6 + 5 + 4 + 3 = 18 -> 什么都不做
  8. 6 + 5 + 4 + 3 + 2 = 20 -> 我们需要的答案

我想这是对已接受答案的一种变体,但仍然认为我可以将其添加为替代解决方案。

于 2013-09-27T13:05:31.313 回答
0

首先,每个奇数都是 AP 长度 2 的总和,因为n = floor(n/2) + ceil(n/2).

更有趣的是,具有奇数除数 d 的数是 AP 长度 d(差为 1)的和n/d。例如,30 可以被 5 整除,AP 的总和也可以被 5 整除:30 = 4 + 5 + 6 + 7 + 8

没有奇数除数的数字是 2 的幂。虽然1 = 0 + 1和 2 = -1 + 0 + 1 + 2,但更大的幂不是任何(非平凡)算术级数的总和。为什么?假设2**m = a + (a+1) + .. + (a+k-1)。对系列求和= k (2a + k-1) / 2。k 必须是奇数或偶数,但任一选择都与 2 的幂的和相矛盾。

于 2013-09-27T13:06:05.233 回答