C 中沙漏的总和(二维数组)

the sum of an hourglass in C (2D array)

打印 arr 中找到的最大(最大)沙漏总和:

-1 -1  0 -9 -2 -2
-2 -1 -6 -8 -2 -5
-1 -1 -1 -2 -3 -4
-1 -9 -2 -4 -4 -5
-7 -3 -3 -2 -9 -9
-1 -3 -1 -2 -4 -5
int hourglassSum(int arr_rows, int arr_columns, int** arr) {
    int max=0;
    int i,j;
    for(i=0;i<arr_rows-2;i++){
        for(j=0;j<arr_columns-2;j++){
          int sum=arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2];
           if(sum>=max){
               max=sum;
           }
        }   
    }
    return max;
}

答案应该是 -6 但我得到 0 为什么会这样 happen

两个问题:

首先,max设置为0(int max=0),所有和都是负数,因此0总是更大。

其次,请参阅 How to pass 2D array (matrix) in a function in C? 以了解如何将二维数组传递给函数。

(代码示例,但其他解决方案也是可能的。我想你的编译器支持 VLA。如果不是这种情况,请告诉我。我有另一个解决方案)

#include <math.h> // To have the definition of INFINITY

int hourglassSum(int arr_rows, int arr_columns, int arr[arr_rows][arr_columns]) { //For compiler that supports VLA
    int max=-INFINITY;
    int i,j;
    for(i=0;i<arr_rows-2;i++){
        for(j=0;j<arr_columns-2;j++){
          int sum=arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2];
          printf("sum %d\n",sum);
           if(sum>=max){
               max=sum;
           }
        }
    }
    return max;
}

并称它为:hourglassSum(6,6,a)