2017-03-23 30 views
0

我有以下2個dim陣列。我想找出每列有1的列。C++哪些列在2個dim陣列中每行有1s

所以,當我運行下面的代碼,我希望看到:

0:02 1:13 3:01 

但是我不明白這一點。

有什麼建議嗎?

#define MAX_N 100 

int myArray[4][4] = { 
    { 1,0,0,1 }, 
    { 0,1,1,1 }, 
    { 1,0,1,0 }, 
    { 0,1,1,0 } 
}; 

int main() 
{ 
    int K[MAX_N] = { 0,1,3 }; 
    int B[MAX_N]; 
    for (int i = 0; i < 3; i++) 
    { 
     K[i]; 
     cout << K[i] << ": "; 

     for (int x = 0; x < 4; x++) 
     { 
      int count = 0; 
      for (int y = 0; y < 3; y++) 
      {    
       // count = count +1;     
       if (myArray[x][y]) 
        count = count + 1; 

       if (count == K[i]) 
       { 
        B[x] = x; 
        cout << B[x] << " "; 
       } 
      } 
     } 
    } 

    system("pause"); 
    return 0; 
} 

如果我改變了最初的陣列,使其爲:

int myArray[4][4] = { 
    { 1,1,0,1 }, 
    { 0,1,1,1 }, 
    { 1,0,1,0 }, 
    { 0,1,1,0 } 
}; 

我會得到如下結果:

0: 02 1:013 3: 01 

有沒有什麼辦法讓這些的交集?換句話說,只得到0,因爲當列等於K [i]時,在行之間只有0是共同的。那麼,結果將是:

0:0 1:0 3:0 

甚至只是

0 

希望這是有道理的

回答

0

當你想看到的元素在矩陣中,你只需要2個週期,而是創建一個用於打印行的新數組,您可以在for中打印索引。

int main() 
{ 
    int count; 
    for(int row = 0; row<4; row++){ 
    count = 0; 
    for (int col = 0; col < 4; col++) { 
     if(myArray[row][col] == 1) 
     count++; 
    } 
    cout<<"row "<<row<<"has "<<count<<" 1s"; 
    } 
    return 0; 
} 
4

我想你想獲得哪些行包含1當列等於K[i]

int main() 
{ 
    int K[MAX_N] = { 0,1,3 }; 
    for (int i = 0; i < 3; i++) 
    { 
     cout << K[i] << ": "; 

     for (int x = 0; x < 4; x++) 
     { 
      if (myArray[x][K[i]]) { 
       cout << x; 
      } 
     } 
     cout << " "; 
    } 

    system("pause"); 
    return 0; 
} 

關於第二個問題,加break;cout << x;

+0

幾乎在1000代表...將幫助你。 – Walter

+1

@Walter我有點興奮地解決一個不清楚的問題。謝謝你! :-) –

+0

是的,我問的不是很清楚。是indedd,我想要的是當列等於K [i]時,得到哪些行包含1。所以,這篇文章回答了我的問題。謝謝! 當一個人運行此代碼,然後出現: 0:02 1:13 3:01,這是我想要的。 – AlPap