| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4597 人关注过本帖
标题:[讨论] 一个2n的整数数组,分成个数相等的两组,保证两组和之差的绝对值最小 ...
取消只看楼主 加入收藏
steelking
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-9-19
收藏
 问题点数:0 回复次数:1 
[讨论] 一个2n的整数数组,分成个数相等的两组,保证两组和之差的绝对值最小

一个2n的整数数组,现要分成个数相等的两组,每组 n 个整数。

设计算法,保证两组和之差的绝对值最小
搜索更多相关主题的帖子: 整数 绝对值 相等 
2007-09-19 15:43
steelking
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-9-19
收藏
得分:0 



这有一种思想:不停的交换两部分之间的元素,使得这两部分之间的和之差越来越小。



#include<stdio.h>
#include<math.h>
#include<stdlib.h>

void change(int *x, int * y)
{
int temp=*x;
*x=*y;
*y=temp;
}

int main()
{
int a[4]=
{
4,2,3,6
};
int b[4]=
{
10,11,15,19
};

int i,j;
int sumA=0;
int sumB=0;

for(i=0;i<4;i++)
{
sumA+=a[i];
sumB+=b[i];
}


int ab_diff=abs(sumA-sumB);


for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
sumA=sumA-a[i]+b[j];
sumB=sumB+a[i]-b[j];
if ( abs(sumA-sumB) > ab_diff )
{
sumA=sumA+a[i]-b[j];
sumB=sumB-a[i]+b[j];
}
else
{
change(a+i, b+j);
ab_diff = abs(sumA-sumB); //更新差值
}
printf("%d,%d\n",sumA,sumB);
}
}

for(i=0;i<4;i++)
{
printf("%d ",a[i]);
}

printf("\n");

for(i=0;i<4;i++)
{
printf("%d ",b[i]);
}

return 1;

}


2007-09-21 11:54
快速回复:[讨论] 一个2n的整数数组,分成个数相等的两组,保证两组和之差的绝对 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030992 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved