2016-11-30 171 views
1

我創建了一個隨機整數存儲在每個位置的二維數組。我的問題是,我想比較每個行元素與下兩個,每個列元素與下兩個,所以沒有相同的數字連續生成3次在行或列。 例如:數組最好應像=如何比較C++中二維數組的行和列?

1 1 2 3 0 2 4 4 
3 2 2 1 0 2 1 1 
0 0 5 2 0 4 3 2 //no 3 same in rows or columns.. 

而且沒有類似:

1 1 2 3 0 4 4 4 
3 2 2 1 0 2 1 1 
0 0 2 2 0 4 3 2  

我寫我的代碼比較陣列第一行,如果有任何變化的值相同,然後行完成後,它會檢查列。現在我的代碼有時候工作,有時卻不工作。誰能告訴我我要去哪裏?這裏是我的代碼:

int array_1[10][15] = { { 0 } }; //creates a new 2-D array with zeros. 
for (int row = 0; row<10; row += 1) //puts random values in array in range 0 to 5 
    { 
     for (int col = 0; col <15; col += 1) 
     { 
      array_1[row][col] = rand() % 6; 
     } 
    } 
for (int row = 0; row <8; row++) 
{ 
    for (int col = 0; col <13; col++) 
    { 
     if (array_1[col][row] == array_1[col][row + 1] && array_1[col][row]== array_1[col][row + 2]) // checks each row for 3 consecutive 
     { 
      array_1[col+1][row] = rand()%6; 
     } 
     if (array_1[col+1][row] == array_1[col + 1][row] && array_1[col][row] == array_1[col + 1][row]) // checks each column for 3 consecutive 
     { 
      array_1[col][row] = rand()%6; 
     } 
    } 
} 

請不要從C++使用任何內置的功能,我想只用邏輯和比較語句來做到這一點。

+0

您是否嘗試通過調試程序逐步調試代碼? –

+0

是的..但是調試器沒有檢測到任何錯誤,因爲代碼確實運行了。只是不是我想要的。 –

+0

這不是一個調試器,那是編譯器。調試器是一種工具,可讓您逐步瀏覽代碼並觀察它的執行方式。這是一個很好的閱讀:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – NathanOliver

回答

2

您在嵌套循環中的索引是錯誤的。當您執行array_1[col][row]時,當col變得等於或大於10時,您將跳出界限。這當然會導致未定義的行爲

我懷疑你的意思是array_1[row][col](就像在初始化循環中一樣)。

1

我覺得你應該將你的邏輯分爲兩部分,以簡化和更好的檢查。第一部分用於驗證行,第二部分用於驗證列。 同樣在你的代碼中,你需要注意rand()%6不應該生成相同的no。再次。我也爲此寫了邏輯。 您可以檢查以下代碼。

// Loop for row 
for(row=0;row<8;row++) 
{ 
    for(col=0;col<13;col++) 
    { 
     if(array_1[row][col] && array_1[row][col+1] && array_1[row][col+2]) 
     { 
      // Make sure that rand()%6 should not generate same number 
      while(array_1[row][col+1] == array_1[row][col+2]) 
      { 
       array_1[row][col+1] = rand()%6; 
      } 
     } 
    } 
} 
//Loop for column 
for(col=0;col<13;col++) 
{ 
    for(row=0;row<8;row++) 
    { 
     if(array_1[row][col] && array_1[row+1][col] && array_1[row+2][col]) 
     { 
      // Make sure that rand()%6 should not generate same number 
      while((array_1[row+1][col] == array_1[row+2][col]) && (array_1[row+1][col] == array_1[row+1][col+1])) 
      { 
       array_1[row+1][col] = rand()%6; 
      } 
     } 
    } 
} 
0

這裏是我的解決方案,創建一個沒有任何值連續重複3次在一行或一列中的二維數組。

#include <iostream> 
#include <string> 
#include <time.h> 

int main() 
{ 
    srand(time(NULL)); 
    int array_1[10][15] = { { 0 } }; //creates a new 2-D array with zeros. 
    for (int row = 0; row < 10; row++) //puts random values in array in range 0 to 5 
    { 
     for (int col = 0; col < 15; col++) 
     { 
      array_1[row][col] = rand() % 6; 
      if (col > 1 && array_1[row][col - 1] == array_1[row][col - 2]) 
      { 
       while (array_1[row][col] == array_1[row][col - 1]) 
       { 
        array_1[row][col] = rand() % 6; 
       } 
      } 

      if (row > 1 && array_1[row - 1][col] == array_1[row - 2][col]) 
      { 
       while ((array_1[row][col] == array_1[row - 1][col]) || 
         (array_1[row][col] == array_1[row][col - 1] && array_1[row][col - 1] == array_1[row][col - 2])) 
       { 
        array_1[row][col] = rand() % 6; 
       } 
      } 
      std::cout << array_1[row][col] << " "; 
     } 
     std::cout << std::endl; 
    } 

    return 0; 
}