如果你想不出一个好的算法,试试这个技术:
- 使用铅笔和方格纸运行一个示例。
- 再次运行一个示例,这次记下您执行的每个详细步骤。
- 使用您的步骤再次运行示例。根据需要进行调整。
- 将您的步骤转换为代码。
使用这种技术,您可以提出更合适的问题在 Stackoverflow 上进行搜索,例如“如何实现一个正方形的内存/矩阵区域?”
或者“我如何使用调试器?”
或者“这是重现我的问题的最小程序......,我做错了什么?”
编辑1:(提高我的SO声誉)
从需求来看,您至少需要两个功能:将行设置为给定值或将列设置为给定值。
让我们从像 4x4 矩阵这样的小东西开始。并使用命令: Set Row 1 0 // 将第 1 行设置为全零。请记住,C++ 索引从 0 到 N-1 而不是 1 到 N 的要求是,所以我们必须从我们的行号中减去一个。让我们使用符号:board[row][column]
表示板上的一个单元格。用手:
board[0][0] = 0;
board[0][1] = 0; // Note the incrementing column numbers.
board[0][2] = 0;
board[0][3] = 0; // Note the last column index is 3 not 4.
看上面的代码,我们可以注意到一个模式,即列索引每次都在变化,1。所以我们可以把它放到一个循环中:
Set column to zero.
While column is less than 4 do:
board[0][column] = 0;
column = column + 1;
end-while
下一步是将其转换为一些代码:
unsigned int column;
unsigned int board[4][4];
for (column = 0; column < 4; ++column)
{
board[0][column] = 0;
}
由于该Set Row
命令允许可变行索引和可变行值,我们制作这些变量并将它们插入到我们的代码中:
unsigned int row = 0;
unsigned int value = 0;
unsigned int column;
unsigned int board[4][4];
for (column = 1; column < 4; ++column)
{
board[row][column] = value;
}
我们可以通过提供函数签名将其变成一个独立的函数:
void Set_Row(unsigned int& array[4][4],
unsigned int row,
unsigned int value)
{
// Insert above code fragment here.
}
接下来,为其他命令创建函数。
创建一个main
函数来读取命令。
运行程序,注意问题出在哪里,例如能够在运行时声明任意大小的矩阵。
添加代码以解决问题。
重复。