56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
#include "PointersLibs.h"
|
|
|
|
int SumInSlantUntilNegative(int *ptr_mat, unsigned short rows, unsigned short cols)
|
|
{
|
|
int max = *ptr_mat;
|
|
int steps = cols + ONE;
|
|
|
|
while (rows-- && (*ptr_mat < ZERO))
|
|
{
|
|
max += *ptr_mat;
|
|
ptr_mat += steps;
|
|
}
|
|
|
|
return (max - *ptr_mat);
|
|
}
|
|
|
|
int MaxSumSlant(int *ptr_mat, unsigned short rows, unsigned short cols)
|
|
{
|
|
int *ptr_max_mat = ptr_mat; // Save the pointer of start max
|
|
int max = *ptr_max_mat;
|
|
|
|
unsigned short steps = cols + ONE;
|
|
|
|
int *ptr_temp_mat = ptr_mat + steps; // For checking
|
|
int temp_max = max,
|
|
temp;
|
|
|
|
rows--;
|
|
for (; rows; rows--)
|
|
{
|
|
temp = temp_max + *ptr_temp_mat;
|
|
if (temp < temp_max || temp_max > temp)
|
|
{
|
|
if (temp_max > max)
|
|
{
|
|
max = temp_max;
|
|
ptr_max_mat = ptr_temp_mat;
|
|
}
|
|
temp_max = ZERO;
|
|
}
|
|
temp_max += *ptr_temp_mat;
|
|
ptr_temp_mat += steps;
|
|
}
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
int mat[4][5] = {
|
|
{1,2,3,4,5},
|
|
{2,3,4,5,6},
|
|
{3,4,-1,6,7},
|
|
{4,5,6,7,8}
|
|
};
|
|
|
|
printf("%d\n", MaxSumInSlant(mat, 4, 5));
|
|
} |