2015-10-16 98 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;