我一直坚持这个问题。它要求将数字的平方根从1到n分成两组A和B,使得组A中的数字之和尽可能接近组B中数字的总和。 我已经很努力了,但是我无法想出算法。
答案 0 :(得分:0)
以非递减顺序设想n
个数字(实数),即
你的情况。 sqr(n)
将始终大于sqr(n - 1)
。
撤销列表。
创建4个变量,setA
,setB
为空数组,sumA
,sumB
数字初始化为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