将自然数的平方根分成两组以求最接近的和?

时间:2014-10-27 15:14:41

标签: algorithm numbers discrete-mathematics

我一直坚持这个问题。它要求将数字的平方根从1到n分成两组A和B,使得组A中的数字之和尽可能接近组B中数字的总和。 我已经很努力了,但是我无法想出算法。

1 个答案:

答案 0 :(得分:0)

  • 以非递减顺序设想n个数字(实数),即 你的情况。 sqr(n)将始终大于sqr(n - 1)

  • 撤销列表。

  • 创建4个变量,setAsetB为空数组,sumAsumB数字初始化为0。

  • 从反向列表中选择第一个值并将其附加到setA并添加到sumA

  • 迭代其余的反向列表并追加&添加到设置&和,其总和小于当前值另一个。

从头到尾:

f(divide_in_2_groups) <- (list)
  setA, setB = []
  sumA, sumB = 0

  append setA, list[0]
  sumA <- sumA + list[0]

  for i <- 1 to n
    //if sumA >= list[i]
    if sumA >= sumB
      append setB, list[i]
      sumB <- sumB + list[i]
    else
      append setA, list[i]
      sumA <- sumA + list[i]

  return (setA, sumA, setB, sumB, abs(sumA - sumB))

HTH