2015-10-16 70 views
-1

我似乎无法弄清楚如何比较两个数组在C++中,myArray1 & myArray2,并用myArray2中的元素替换myArray1中的零而不重复任何数字。从本质上讲,我想用1 & 3更换两个零 - 以任意顺序....比较两个数组并替换元素而不重复 - C++

int myArray1[4] = [0,2,0,4] 
int myArray2[4] = [1,2,3,4] 

我想输出是:

myArray1[4] = [1,2,3,4] -or- [3,2,1,4] 

任何帮助将是巨大的,对不起,如果这是一个重复的问题。

+1

威尔'myArray2'中有零吗? –

+2

你是什么意思*没有重复和数字*? 'myArray1'不能有重复,或者你不能使用相同的数字来从'myArray2'中填充它? – NathanOliver

+1

看起来像我的作业... –

回答

0

天真的解决办法是遍历myArray1找到零,并且当找到一个遍历myArray2找到的第一个元素在myArray1不存在(这将在另一个嵌套循环来完成)。

所以你会有三个循环,每个嵌套在另一个循环中。

在伪代码

for each value1 in myArray1: 
    if value1 = 0: 
     for each value2 in myArray2: 
      // Check that the value from myArray2 doesn't exist in myArray1 
      found = false 

      for each tempValue1 in myArray1: 
       if value2 = tempValue1: 
        found = true // Found a duplicate 
        break out of loop 

      if not found: 
       value1 = value2 
       break out of loop 
0

根据我的理解,这可能是解决方案:

int main(){ 

int myArray1[4] = {0,2,0,4}; 
int myArray2[4] = {1,2,3,4}; 

for (int i = 0; i < 4; i ++) 
{ 
    for (int j = i; j <4 ; j++) { 

     if (myArray1[i] == 0) { 
      myArray1[i] = myArray2[j]; 

     } 
    } 
} 
for(int i = 0;i<4;++i){ 
    cout<<myArray1[i]<<" "; 
} 


return 0; 
} 
0

你的任务可以用一组操作来解决:

const size_t N = 4; 
int a[N] = {0,2,0,4}; 
int b[N] = {1,2,3,4}; 
int r[N] = {}; 
{ 
    std::sort(a, a+N); 
    std::sort(b, b+N); 
    // invariant: the a set must be in the b set 
    std::set_union(a, std::remove(a, a+N, 0), b, b+N, r); 
} 
for(size_t i = 0; i < N; ++i) 
    std::cout << i << ":" << r[i] << std::endl;