Files
2022-02-25 15:33:16 +02:00

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));
}