c = {1,2,3,10,20,30,40,50,60,100,200,300}这个数组按照你的算法分成
a = {1,2,3,100,200,300}和是606,b = {10,20,30,40,50,60}和是210,两个数组
差是396
看题目没要求分成两个长度一样的数组,那么差最小的应该是
c = {1,2,3,40,60,100,200}和是406,d = {10,20,30,50,300} 和是410,两个数组
差是4
高斯求1-100和是因为1-100是等差数列,而 c 的元素不是一个等差数列
我的思路是求 c 的和,然后除以2得到一个数x,让 a 数组的和尽可能接近x。
初步设想伪代码如下:int index = c.length-1;
max = c[index]; 如果 max > x 就让 a = {max},其余元素组成 b,否则执行下面循环
for(i = index, i >= 0, i--) { 反向遍历数组 c
if(c[index] < x ) {
将 c[index] 加入 a 数组
index-- ;
x -= c[index]
}
}
结果就取出了300,100,3,2,1
和是406
其余的数是200,60,50,40,30,20,10
和是410