读书人

请问两个数组如何样互补的有关问题

发布时间: 2012-03-13 11:21:10 作者: rapoo

请教两个数组怎么样互补的问题
假设:
int a[]={1,3,5,7,9};
int b[]={2,4,6,8};
要求:
不能将两个数组合并后再分别复制到两个数组中.
结果:
a[]={1,2,3,4,5,6,7,8,9};
b[]={1,2,3,4,5,6,7,8,9};

请达人指教.

[解决办法]
按这种声明不可能,因为ab的空间不够
[解决办法]
插入排序
[解决办法]
不能将两个数组合并后再分别复制到两个数组中?
空间够就先合并再排序不是蛮好吗

[解决办法]

C/C++ code
//比较基础的,没有怎么测试,有错的话,自己改一下,#include <iostream>using namespace std;int main(){    int a[]={1,3,5,7,9};     int b[]={2,4,6,8};     int dest[9], count=0, i;    for (i=0; i<5; i++)    {        dest[i]=a[i];    }    count=i;    for (int j=0; j<4; j++)    {        int k;        for (k=0; k<count; k++)        {            if(dest[k]==b[j])                break;        }        if(k==count) //没有找到相同的元素,        {            dest[count]=b[j];            count++;        }    }    for (int k=0; k<count; k++) cout<<dest[k]<<endl;    return 0;}
[解决办法]
有解决办法:

空间问题:
栈中数据是从高低址到低地址连续存储的,所以只要定义一个指针c:
int * c = b;[注:因为b是后定义的,所以在高地址]
这样c就相当于一个新的数组{2,4,6,8,1,3,5,7}

排序问题:
原地按间隔将a插入b:
i从0开始迭代,直到i = sizeof a;
1 将a[i]取出,存入tmp
2 将b[2*i]及后面的元素后移一个元素,再将tmp插入b[2*i]:c变为{1,2,4,6,8,3,5,7}
3 i++;

迭代结束,将c的地址付给a,b

[解决办法]
看不懂题目,汗。。。

因为开始的数组a只有4个int元素,现在合并后想存储8个元素,可以另写算法扩展,但是这个新的能存储8个int元素的数组就已经不是以前那个数组a 了。。。

[解决办法]
mark一个,呵呵

读书人网 >C++

热点推荐