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

作者&投稿:贡官 (若有异议请与网页底部的电邮联系)
有两个数组a、b,由许多个正整数不规则排序而成.~

2n个数均匀分成两组(个数均为n)的话,不要再考虑什么优化、动态规划之类的算法了。直接枚举是最快的。
下面给出一个C语言的算法:
#include#include/*问题:有两个数组a、b,由许多个正整数不规则排序而成,大小都为n,数组元素的值任意,要求通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小(不考虑负差值)。题目变通为:有1个数组a,由许多个正整数不规则排序而成,为2n个元素,数组元素的值任意,要求拆分成2个数组,使得b元素的和最接近a数组之和的二分之一。*/#define N (10)int a[N]= {28,70,89,2,10,8,4,17,23 , 12};//给定的数组,题目要求需要拆分成2个int b[N/2]= {0};int c[N/2]= {0};int mindiff;int sum=0;void geti(int s ,int n, int index)//s表示当前的和,n表示接下去b数组要取到第 n个元素 ,index表示从a数组的第index个往后取{if(n == (N/2)) //最后一个数了{if(s == sum ) //找到了最优解{//b[n] = a[i];printf("
找到了最优解,和为%d :",s);for(int j = 0 ; j0)&&(s - sum 0)) //找到了比当前的更优解,需要记录下来{mindiff = s - sum;//b[n] = a[i];for(int j = 0 ; j0)//只找到次优解{printf("
找到了次优解,两组的差为 %d:
数组为:",mindiff);for(int j = 0 ; j< N/2; j++) //output(c)printf(" %d ",c[j]);printf("
");}return 0;}

平均时间复杂度为O(1)。
数组是计算机编程语言上,对于“Array”的中文称呼,是用于储存多个相同类型数据的集合。将相同数据类型的元素按一定顺序排列的集合,把有限个类型相同的变量用一个名字命名。
然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。
数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。

编写一个比较器,该比较器类从ICompare继承,实现compare()函数,
然后直接调用sort方法就可以了,将这个比较器的实例作为sort的参数传入。

题目最后一句是什么


ab两个数,a比b大、这两个数的和是100,差是60,求这两个数分别是多少
a-b=60……② ①+②得:2a=160,a=80 b=100-80=20 答:这两个数分别是80和20

用JAVA实现比较两个数a,b的大小,不能应用大于\/小于,if,switch,等判断...
public class Test {public static void main(String[] args) {int a=5,b=-14;int r=Integer.compare(a, b);System.out.print(a+"和"+b+"比:");System.out.println(r==1?"大于":r==0?"等于":"小于");}}5和-14比:大于 ...

两个已经排好顺序的数组a和数组b,并将比较后的数组从大到小排序,在进行...
1、现将a、b排好序的两数组变为从大到小顺序;(已经是这个顺序的可省去此步骤)2、合并a、b得到c,使c元素仍然从大到小(不允许合并后再排序)。

数组比较大小
1、比较数组元素数量:可以通过遍历两个数组,比较的元素数量来比较大小。例如,数组a有5个元素,而数组b有3个元素,那么可以说数组a比数组b大2个元素。2、比较数组元素大小:可以通过遍历两个数组,比较的元素大小来比较大小。例如,数组a的元素依次为2、4、6、8、10,而数组b的元素依次为1、3、5...

c语言求任意两个数字a,b中比较大的那个数的平方
根据题意可得如下代码:include <stdio.h>int fun(int a, int b){ if (a > b)return a*a; else return b*b;}int main(){ int a, b; scanf ("%d%d", &a, &b); printf ("%d\\n", fun(a, b)); return 0;} ...

编程分别输入两个按从小到大排序的数组a和b,将这两个有序数组合并,使合...
define N 20 int main(){ int a[N]={ 0 }, b[N]={ 0 };int anum,bnum,c[N+N];int *pi, *pj,*pk;scanf("%d",&anum); \/\/输入数组a元素个数 for(pi=a;pi<a+anum;pi++){ scanf("%d",pi);} scanf("%d",&bnum); \/\/输入数组b元素个数 for(pj=b;pj<b+b...

java中,两个数组a[],b[],a=b后,a中值变b也会变了吗?
会改变. 因为数组a=数组b 只是浅层复制,代码如下 import java.util.Arrays;public class ArrayDemo {public static void main(String[] args) {int[] b = {1,3,5,7,9};int[] a = b;a[0]=12;\/\/a数组的元素改变了System.out.println(Arrays.toString(b));\/\/b数组的元素跟着改变\/\/...

有两个数组a、b,由许多个正整数不规则排序而成.
include<stdio.h>#include<math.h>\/*问题:有两个数组a、b,由许多个正整数不规则排序而成,大小都为n,数组元素的值任意,要求通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小(不考虑负差值)。题目变通为:有1个数组a,由许多个正整数不规则排序而成,为2n个元素,数组...

有两个整型数组a和b,各有10个元素,将它们对应地逐个相比。如果a数组中...
h>int cmp(int a[],int b[],char c){int i,j,aa1[10]={0},bb1[10]={0},aa2[10]={0},bb2[10]={0}; char c1='a'+'b'-c; for(i=0;i<10;i++) for(j=0;j<10;j++) if(a[i]>b[j]){aa1[i]++;bb2[j]++;} else if(a[i]<b[j]){aa2[i]+...

对两个数组a和b进行如下初始化: char a[] = “ABCDEF”; char b[] =...
答案是D,a数组比b数组长度长 原因:a数组的长度是6,b数组的长度是7。在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\\0'作为串的结束符。

偏关县13945229791: c 要求提供一个思想或思路原题:有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之... -
褚虹妇科:[答案] 用枚举法的话总共有(2n)!/2(n!*n!)>2的(2n-1)次方种可能,不可行. 其它方法,我没想起来

偏关县13945229791: 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
褚虹妇科: 这个不是个经典面试题吗?请参见:http://blog.csdn.net/v_JULY_v/archive/2010/11/27/6039896.aspx第32题.答案在这里面有:http://blog.csdn.net/v_JULY_v/archive/2010/11/17/6015165.aspx顺带一提,这个可是很好的资源,一般人我不告诉他XD我也写过一个版本,主要思想和答案里差不多.

偏关县13945229791: 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b
褚虹妇科: 编写一个比较器,该比较器类从ICompare继承,实现compare()函数, 然后直接调用sort方法就可以了,将这个比较器的实例作为sort的参数传入.

偏关县13945229791: 求解一道面试题 -
褚虹妇科: 思路: 设两数组所有数(2N个)总和为SUM,要是两数组差值最小(最小为0),最小为0是说明单数组之和为SUM/2,但是很多情况是不等于的,所以我们的目的从2N个数中选出N个数之和最接近于SUM/2. 如果N数量较小,用枚举法比较容易实现,枚举出的个数可以用排列组合来求,但是N如果很大,枚举法就效率太低,暂时还没有N很大的时候后的思路= =.

偏关县13945229791: 8分钟内完成程序 -
褚虹妇科: 当前数组a和数组b的和之差为 A = sum(a) - sum(b) a的第i个元素和b的第j个元素交换后,a和b的和之差为 A' = sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i]) = sum(a) - sum(b) - 2 (a[i] - b[j]) = A - 2 (a[i] - b[j]) 设x = a[i] - b[j] |A| - |A'| = |A| - |A-2x| 假设A > 0, 当...

偏关县13945229791: 给定两个排好序的数组A,B,大小分别为n,m.给出一个高效算法查找A中的哪些元素 -
褚虹妇科: 一般在大数组中执行二分查找,将小数组的元素作为需查找的对象.更优算法:可以使用两个指针遍历AB,比较当前大小就可以了...时间复杂度o(n+m)

偏关县13945229791: 将两个相同长度N的数组a和b,按照先取一个a元素,填入c,再取一个b元素填入c的方法,构成一个长度 -
褚虹妇科: 填空部分的代码如下:for(i=0;i<N;i++) {*pc++=*pa++;*pc++=*pb++; }

偏关县13945229791: 数据结构问题,有两个已排好序的数组a[],b[],都含有n个元素,请设计函数判断两数组中有无相同元素 -
褚虹妇科: bool FindSameNum(int a[],int b[],int n)//默认a的其实值比b的起始值要大,n描述数组的大小 { bool flag = false; int k1 , k2; for( k1 = 0,k2 = 0; k1 < n, k2 < n; ) if(a[k1] > b[k2]) { k2++; } else if(a[k1] == b[k2]) { flag = true; printf("you!\n"); break; } else { k...

偏关县13945229791: 写函数 select(int n,double a[],double b[],double x),它将数组b中大于x的数顺序复制到数组a中. -
褚虹妇科: a数组的内容为空,n是两个数组的大小 select(int n,double a[],double b[],double x) { int i,m=0; for(i=0;i

偏关县13945229791: 编写一个函数,有2个数组a[m],b[n],其中n>m,将a数组中重复的元素剔除,按相反的顺序复制的数组b中 -
褚虹妇科: #include<iostream> using namespace std; int main() { const int m=100,n=200; int a[m],b[n]; int i,j,t; int temp=0,k=0; bool flag=true; cout<<"please input array's sum:\n"; cin>>t; cout<<"please input array's numbers:\n"; for(i=0;i<t;i++) cin>>a[i]; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网