题目描述:

有两个数组a,b,大小都为n,数组元素的值任意整型数,无序;
          要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。

#include "stdafx.h"#include <math.h>
#include <time.h>
#include <stdlib.h>void print_arr(int a[], int b[], int n)
{printf("a: ");for (int i=0;i<n;i++){printf("%d ", a[i]);}printf("\n");printf("b: ");for (int i=0;i<n;i++){printf("%d ", b[i]);}printf("\n");printf("\n");
}bool swap_min(int a[], int b[], int n)
{printf("before swap:\n");print_arr(a, b, n);// 初始化差值int sum_a=0;int sum_b=0;for (int k=0;k<n;k++){sum_a += a[k];sum_b += b[k];}int delta_init = abs(sum_a - sum_b);for (int i=0;i<n;i++){/*if (delta_init == 0) // 优化处理{break;}*/int sum_a=0;int sum_b=0;for (int k=0;k<n;k++){sum_a += a[k];sum_b += b[k];}// 假设交换,差值是否更小bool bswp = false;int jpos = 0;for (int j=0;j<n;j++){int sum_atemp = sum_a-a[i]+b[j];int sum_btemp = sum_b-b[j]+a[i];int delta_temp = abs(sum_atemp-sum_btemp);if (delta_temp < delta_init){delta_init = delta_temp;jpos = j;bswp =true;}}// 假设成功,执行交换元素if (bswp){int tmp = a[i];a[i] = b[jpos];b[jpos] = tmp;}}printf("after swap:\n");print_arr(a,b,n);return true;
}int _tmain(int argc, _TCHAR* argv[])
{int a[5] = {0, 0, 0, 0, 9};//1,2,3,4,5int b[5] = {1, 2, 5, 4, 3};//6,7,8,9,100int c[] = {1,2,3,4,5};int d[] = {6,7,8,9,100};int e[]={1,2,3,4,5};int f[]={10,20,30,40,50};swap_min(a, b, 5);swap_min(c, d, 5);swap_min(e, f, 5);errno_t err;  unsigned int number;  err = rand_s(&number);  int m[100];int n[100];srand( (unsigned)time(NULL)); //生成种子for (int i=0;i<100;i++){m[i]=rand()%100;n[i]=abs(rand()%200-100);}swap_min(m, n, 10);getchar();return 0;
}

交换两个数组的元素使之总和的差值最小相关推荐

  1. python交换数组中的两个元素_[Python]华为面试题,交换两个数组的元素使之总和的差值最小。...

    看看写了个 ,实现不需数组长度一致,复杂度O(n^2),求好的算法 /** arr1={1,2,3}; * arr2={22,33,44,55}; * 交换两个矩阵数据 */ public void ...

  2. c语言将两个数组交换,C语言交换两个数组的元素

    1.将数组A中的内容和数组B中的内容进行交换.(数组一样大) // 将数组A中的内容和数组B中的内容进行交换.(数组一样大) #define _CRT_SECURE_NO_WARNINGS #incl ...

  3. 问题 A: 第二题(划分一个集合为差值最小的两个子集合)

    题目描述 一个数组中有若干正整数,将此数组划分为两个子数组,使得两个子数组各元素之和a,b的差最小,对于非法输入应该输出ERROR. 输入 数组中的元素 输出 降序输出两个子数组的元素和 样例输入 1 ...

  4. 18966 两两配对差值最小

    题目描述 拼多多2019秋招部分编程题 给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值, 请问该如何两两配对,才能让最大值和最小值的差值最小? 输入格式 一 ...

  5. 数组:交换两个对应的元素

    问题描述: 给定一个数组,以及两个代表数组下标的整数,交换数组中这两个下标对应的元素. 最基本的数据结构就是数组和链表,其它复杂的数据结构也多是这两种基本结构的组合或者变形.针对数组,最常用的就是交换 ...

  6. arrays中copyof复制两个数组_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  7. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...

    此类实现: 输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组. 并交换两个子数组的位置,保持子数组中的元素序号不变. 如:原数组为7,9,8,5,3,2 以下标3为分割点, ...

  8. 用指针交换两个数_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  9. html计算一个数组所有元素的和,函数bsxfun,两个数组间元素逐个计算的二值操作...

    转自http://www.cnblogs.com/rong86/p/3559616.html 函数功能:两个数组间元素逐个计算的二值操作 使用方法:C=bsxfun(fun,A,B) 两个数组A合B间 ...

最新文章

  1. 将深度学习技术应用于基于情境感知的情绪识别
  2. linux 时间日期类常用命令
  3. Panda和numpy库和matplotlib库的安装
  4. 在VS2010 中使用subversion 进行代码的分支与合并
  5. python获取字符串首字母_[Python] Python 获取中文的首字母 和 全部拼音首字母
  6. linux C下的setjmp与longjmp介绍
  7. java限流器_Smaphor(信号量)实现限流器
  8. 初识Python 04 day
  9. 利用poi3.8中SXSSFWorkbook实现大数据量导出excel
  10. 苏州大学计算机考研 复试机试真题2013-2020真题及Python题解
  11. Uncaught SyntaxError: Unexpected token lt; 错误完美解决
  12. 易到用车服务器修复了提现,易到用车提现最新消息 易到用车跑路了吗?
  13. vulfocus靶场进不去
  14. 在一个字符串中搜索某个特定的字符值
  15. 从ICML 2022看域泛化(Domain Generalization)最新进展
  16. 【Linux】查看网络接口(ifconfig | nmcli)
  17. 水体微生物多样性分析
  18. CAP定理,分布式系统
  19. 二维码生成工具微信小程序源码下载
  20. 文件上传(感谢秦疆老师)

热门文章

  1. 360浏览器卸载_有恃无恐“弹弹弹”,安全卫士360自己就是最大的流氓“弹窗王”!...
  2. 服务器操作系统策略,Windows操作系统组策略应用全攻略(2)服务器教程 -电脑资料...
  3. qt .pro文件
  4. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
  5. 桌面程序开发入门(WinForm with C#)
  6. Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
  7. 我的2013-从GIS学生到GIS职业人的飞跃
  8. OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用
  9. 图形处理(六)拖拽式网格融合-Siggraph 2010
  10. RANSAC算法做直线拟合