(递归法)有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
来源:互联网 发布:网络代销 编辑:程序博客网 时间:2024/06/08 08:35
#include "stdafx.h"#include <stdio.h>#include <math.h>/*有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如:var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];*//*思路: 即求sums=|sum(a)-sum(b)|的最小值;1.建立一个临时数组将数组a,b合并成一个新数组myarr[],维度为2n,并计算初始sums;2.依次从新数组myarr[]中选择n个数,填入临时数组temparr[]中,并计算累加和sum,计数标记为counts++;3.当temparr[]元素为n时,比较sum和sums,如果sum更小则保存较小值dt_sum;*/#define N 6 //数组元素个数int myarr[2*N];int sums = 0; //a b数组之和int dt_sum = 0; //|sum(a)-sum(b)|int counts = 0;int temparr[N]; //用与记录结果//递归函数void SwapArr(int index, int sum){if (counts >= N){int temp_dt_sum = abs(sums - 2 * sum);if (temp_dt_sum < dt_sum){//输出每次比较结果printf("A=[");for (int k = 0; k < N ; k++)printf("%d ", temparr[k]);dt_sum = temp_dt_sum;printf("] |sum(a)-sum(b)|=%d\r\n", temp_dt_sum);}return;}for (int i = index; i < 2*N; i++){sum = sum + myarr[i];//求和temparr[counts] = myarr[i];//记录当前元素counts++;//元素计数SwapArr(i + 1, sum);//递归输入新数//返回到i状态temparr[counts] = 0; counts--;sum = sum - myarr[i];}}int main(){int a[] = { 100, 99, 98, 1, 2, 3 };int b[] = { 1,2, 3, 4, 5, 40 };int a_sum = 0,b_sum=0;/*统计a b数组和 数组合并为myarr[2*N]*/for (int i = 0; i < N; i++){myarr[i] = a[i];myarr[i + N] = b[i];a_sum = a_sum + a[i];b_sum = b_sum + b[i];}/*dt_sum=|sum(a)-sum(b)|*/dt_sum = abs(a_sum - b_sum);/*求数组总和*/sums = a_sum + b_sum;SwapArr(0, 0);return 0;}
阅读全文
1 0
- 有两个序列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元素的和]之间的差最小。
- 有两个序列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元素的和]之间的差最小。
- 每天学习一算法系列(29)(有两个序列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元素的和]之间的差最小
- 写正确函数需要注意的地方:两个序列a,b,大小都为n,序列元素的值为任意整数,无序;要求通过交换a,b中的元素,使序列a元素的和与序列b元素的和之间的差最小
- 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和
- 有两个序列a,b,要求:通过交换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元素的和之间的差最小。
- leetcode 229. Majority Element II
- 解决popwindow在窗体未加载完成时候显示报错问题
- CODE[VS]1005 生日礼物
- Android的单例模式
- 堆排序
- (递归法)有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
- 【CodeForces】678C
- NYOJ—吝啬的国度
- 第一个JAVA小程序的程序框架
- jQuery学习笔记3
- jQuery学习笔记4
- NYOJ三个水杯
- stc单片机远程升级12系列
- 一键生成yyyy-mm-dd 到yyyy-mm-dd时间设置的前后台方式