我如何比较C 中2-D数组的行和列
How do I compare rows and columns of a 2-D array in C++?
我已经创建了一个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;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '