- 论坛徽章:
- 0
|
上面我有发表我的算法,但是有些错误没改过来,现在这个是改进的,应该没什么问题了
#include<stdio.h>
#define SIZE 3
int
sumb (int m[], int n)
{
int i;
int sum = 0;
for (i = 0; i < n; i++)
sum += m[ i ];
return sum;
}
main ()
{
int min;
int tmp;
int i;
int j;
int this;
int a[SIZE] = {
1, 7, 3
};
int b[SIZE] = {
10, 15, 4
};
min = sumb (a, SIZE) - sumb (b, SIZE);
min = min > 0 ? min : (-1) * min;//初始化min,此时min为两个数组总和之差
for (i = 0; i < SIZE; i++)
for (j = 0; j < SIZE; j++)
{
this = sumb (a, SIZE) - sumb (b, SIZE) + 2 * (b[ j ] - a[ i ]);
this = this >= 0 ? this : (-1) * this;
if (this < min)//如果this不小于min的话就不进行交换
{
min = this;
if (min == 0)//如果找到差值为0的组合,则提前退出
break;
tmp = a[ i ];
a[ i ] = b[ j ];
b[ j ] = tmp;
}
}
printf ("Min=%d\n", min);
} |
|