我正在研究一个类的问题,该类要求我们使用2d动态数组来获取每个数组'block'的每个条目的整数并保存它。它必须能够采用任何大小的数组,所有这些都是在程序运行时从用户输入的。 然后,数组中的条目将按数组中的每个3x3部分进行排序,并返回最大“部分”的总和。
我没有分配内存和分配整数的问题,我还设置了在程序完成时删除并返回所有动态内存,但我无法弄清楚如何访问每个3x3数组的一部分。我只能访问第一个添加到一起,而不使用循环。我非常确定我需要一个循环来获取所有数据。
我如何访问,汇总和比较阵列的每个3x3部分?
这是我到目前为止的一部分;
int sumGrid = 0;
// this will get the 1st 3x3's sum correct
sumGrid = (grid[i][j] + grid[i+1][j] + grid[i+2][j] + grid[i][j+1]
+ grid[i+1][j+1] + grid[i+2][j+1] + grid[i][j+2]
+ grid[i+1][j+2] + grid[i+2][j+2]);
// this part isn't right though
for (i = 0; i < height; i++)
{
for(j = 0; j < width; j++)
{
if(((i+1)<height)&&((i+2)<height)&&((j+1)<width)&&((j+2)<width))
{
int tempGrid = 0;
tempGrid = (grid[i][j] + grid[i+1][j] + grid[i+2][j] + grid[i][j+1]
+ grid[i+1][j+1] + grid[i+2][j+1] + grid[i][j+2]
+ grid[i+1][j+2] + grid[i+2][j+2]);
if(tempGrid < sumGrid)
sumGrid = tempGrid;
}
else break;
}
}
biggestGrid = sumGrid;
任何有关正确方向的帮助或观点都将不胜感激!谢谢!
答案 0 :(得分:0)
在循环内部,您可以访问元素i + 1和i + 2以及j + 1和j + 2。但是,朝向数组的边缘,它将超出范围。
要解决此问题,您需要将数组停在height-2和width-2而不是height和width。