我如何比较C 中2-D数组的行和列

How do I compare rows and columns of a 2-D array in C++?

本文关键字:数组 2-D 何比较 比较      更新时间:2023-10-16

我已经创建了一个2-D数组,并在每个位置存储随机整数。我的问题是,我想将每个行元素与接下来的两个元素和每个列元素与接下来的两个元素进行比较,以便在行或列中连续3次生成相同的数字。例如:理想情况下应该像=

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 的任何内置功能,我只是尝试使用逻辑和比较语句来执行此操作。

嵌套环中的索引是错误的。当您进行array_1[col][row]时,当col等于或大于10时,您将脱离界限。当然,这会导致不确定的行为

我怀疑您是指array_1[row][col](就像在初始化循环中)。

我觉得您应该将逻辑分为两个部分,以进行简单和更好的检查。验证行的第一部分,第二部分用于验证列。另外,在您的代码中,您需要注意rand()%6不应生成相同的否。再次。我也为此写了逻辑。您可以检查以下代码。

// 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;
            }
        }
    }
}

这是我的解决方案,可以创建一个2D数组,而没有任何值在连续或列中连续3次重复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;
}