您的位置:首页 > 其它

数组试题---交换两数组元素使和差最小

2015-04-16 15:46 148 查看
/*
*有数组a
和b
,都是无序的
*请交换a,b的某些元素,让它们的
*总和之差最小
*/

#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++)
{
/*这里是先互相交换一个元素进行求总和相减,注意,其实两个数组并没有改变,当且仅当
*这里求得的差比min小时才进行真正的交换
*/
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐