2016-11-30 173 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; 
}