Найти координаты начала той области, сумма значений элементов которой максимальная - C (СИ)
Формулировка задачи:
Задано количество строк и столбцов матрицы, действительные значения её элементов и размеры прямоугольной области. Найти координаты начала той области, сумма значений элементов которой максимальная, и значения этой суммы.
Решение задачи: «Найти координаты начала той области, сумма значений элементов которой максимальная»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int M[15][15]={0}, m,n,i,j;
int O[15][15], Mo,No;
printf("Enter matrix size:\n");
while(1)
{
printf("Enter number of lines:\n");
scanf("%d", &n);
fflush(stdin);
if (n>1 && n<=15)
break;
printf("Error!\n");
}
while(1)
{
printf("Enter number of column:\n");
scanf("%d", &m);
fflush(stdin);
if (m>1 && m<=15)
break;
printf("Error!\n");
}
for (i=0; i <n; i++)
{
for (j=0; j <m; j++)
{
printf("M[%d][%d] = ", i+1,j+1);
scanf("%d",&M[i][j]);
}
} printf("Enter size of area :\n"); //*Введем размер области*//
while(1)
{
printf("Enter number of lines:\n");
scanf("%d", &No);
fflush(stdin);
if (No>0 && No<=15)
break;
printf("Error!\n");
}
while(1)
{
printf("Enter number of column:\n");
scanf("%d", &Mo);
fflush(stdin);
if (Mo>0 && Mo<=15)
break;
printf("Error!\n");
}
int Mx = 0;
int im,jm,ii,jj;
double S = 0;
for(i=0; i<=(n-No); i++)
for(j=0; j<=(m-Mo); j++)
{
for(ii=0; ii<No; ii++)
for(jj=0; jj<Mo; jj++)
S += M[i+ii][j+jj];
if ((i==0 && j==0) || S > Mx)
{
Mx = S;
im = i;
jm = j;
}
}
printf("(%d, %d) S=%d\n", im+1, jm+1, Mx);
system ("pause");
return 0;
}