转载:大家又没有比较好的思路阿!借鉴一下
三楼回答的非常对
按11楼的想法我写了一个程序,请诸位测试
#include<stdio.h>
int main()
{
int i, j, k, p, tag, n, a[100], b[100], c[100];
float t, sum, sumb;
scanf("%d", &n);
while(n) {
sum = 0; sumb = 0;
for(i = 0; i < n; i++) {
scanf("%d", &a[i]);
sum +=a[i];
}
for(i = 0; sumb < sum / 2; i++) {
b[i] = a[i];
sumb += b[i];
}//当大于一半sum时赋给数组b
tag = i;//记录数组b的个数
for(j = 0; i < n; i++, j++)
c[j] = a[i];
t = sumb - sum / 2;//记录数组b与平均数的差值
for(j = 0; j < tag; j++)
for(k = 0; k < n - tag; k++) {
if((b[j] - c[k]) >0 && (b[j] - c[k]) < t) {
t = t - b[j] + c[k];
p = b[j];
b[j] = c[k];
c[k] = p;
j--;
break;
}
if(b[j] < t) {
c[n - tag] = b[j];
t = t - b[j];
for(p = j; p < tag - 1; p++)
b[p] = b[p + 1];
b[p] = 0;
tag--; j--;
break;
}//如果数组b中的值小于t将它给c并且b中值为0或者b中值大于0且小于t则交换
}
printf("%d\n", (int)(2 * t));
scanf("%d", &n);
}
return 0;
}