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)
打印 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)