Найти координаты начала той области, сумма значений элементов которой максимальная - 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; 
}

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы