两个数组a[n],b[n]重新排列后,两数组的和的差最小
来源:互联网 发布:免费玻璃排版软件 编辑:程序博客网 时间:2024/06/05 10:37
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小!
如:int a[6]={1,3,4,5,20}; int b[6]={6,30,8,9,10}; 运算后 a[6]={10,9,4,5,20,0};
思想:1)首先求出a数组元素之和与b数组元素之和的差的绝对值。
2)用a中元素替换b中任意一个元素,重新计算其差的绝对值,如果绝对值小于原来的,则实现元素的交换。
3)重复上述步骤直到不能交换
具体代码实现:
# include <iostream>using namespace std;int swap(int * a,int sizea,int *b,int sizeb){int suma=0,sumb=0;for(int ai=0;ai<sizea;ai++)//求数组a的和{suma+=a[ai];}for(int bj=0;bj<sizeb;bj++)//求数组b的和{sumb+=b[bj];}int abssum=abs(suma-sumb),abstemp;//和的差的绝对值for(ai=0;ai<sizea;ai++){ bool flag=false;//是否能交换while(true){for(bj=0;bj<sizeb;bj++){ abstemp=abs((suma+b[bj]-a[ai])-(sumb-b[bj]+a[ai]));//用a中元素替换b中的元素 if(abstemp<abssum) { suma+=b[bj]-a[ai];sumb+=a[ai]-b[bj];abssum=abstemp;int temp=a[ai]; //交换a[ai]和b[ai]a[ai]=b[bj];//b[bj]=temp;flag=true; break;// 由于发生了交换a,b中的元素都发生了变换,所以跳出bj的for循环,重新开始与b中元素替换 }}if(bj>=sizeb) //结束里层for循环,换下一个a[ai]break;}//如果有交换,且ai的值为最后一个元素, //那么我们必须重新再来一遍,直到没有元素交换为止. //重新验证如果没有也可以//if((ai==sizea-1)&&flag)//{//flag=false;//ai=-1;//}}return abssum;}void s(int * a,int *b){a[0]=0;int sizea=sizeof(a)/sizeof(a[0]);cout<<sizea<<endl;}int main(){int a[6]={10, 50, 30, 1, 20, 3};int b[6]={100, 2, 35, 4, 5, 40}; int c=swap(a,6,b,6);cout<<c<<endl;for(int i=0;i<6;i++)cout<<a[i]<<" ";cout<<endl;for( i=0;i<6;i++)cout<<b[i]<<" ";return 0;}
- 两个数组a[n],b[n]重新排列后,两数组的和的差最小
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- 【华为】题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求: 通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- 交换两个长度均为n的无序数组的元素,使两数组元素的和之差的绝对值最小
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 长度为2N的数组分割成2个长度为N的数组,且两数组的和的差的绝对值最小
- 给出两个长度为N的有序数组A和B 给出求中位数的算法
- 两个数组a[N],b[N],其中a[N]的各个元素值已知,现给b[i]赋值
- 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值 .
- 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值
- 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值
- 重新组合两个数组,使得他们的元素差最小
- 交换两个数组使两个数组和的差最小
- 交换两个数组使两个数组和的差最小
- 交换两个数组使两个数组和的差最小
- 数据库大作业
- HTML Application
- Java数据库设计14个技巧
- Java常用术语解释
- 上一个计算器有bug,还是用语法制导的方法计算表达式,这个没有bug,用的是LL(1)表达式文法,以=号结束
- 两个数组a[n],b[n]重新排列后,两数组的和的差最小
- [JAVA]使用Eclipse从下载到编写一个实例全过程
- VS2008 VS2010发布网站时如何产生固定命名的 Dll 文件
- 【并查集】食物链
- 新一代搜索引擎WolframAlpha
- MFC DllMain
- LFS(3)
- 【并查集】冗余关系
- Ubuntu下SSH设置