Matrisin qismən cəmi#683

Matrisin qismən cəmi (Həll təhlili)

Qoy — giriş massivi olsun, — hissə-hissə cəmlərin massivi olsun. Massivi sətrlər üzrə artma sırası ilə dolduraq və hər bir sətr içərisində xanaları sütunların artma sırası ilə dolduraq. Fərz edək ki, hal-hazırda massivi s_{i,j}-a qədər hesablanmışdır.

Bu halda

s_{i,j} = s_{i - 1,j} + s_{i,j - 1} - s_{i - 1,j - 1} + a_{ij}

Nümunə

Verilən nümunə üçün s_{3,5}-in qiymətini necə hesablamaq nəzərdən keçirin.

s_{3,5} = s_{2,5} + s_{3,4} – s_{2,4} + a_{3,5} = 30 + 35 – 24 + 4 = 45

Tapşırıq

Verilmiş a_{ij} massivi üçün s_{ij} massivi elementlərinin qiymətlərini hesablayın.

Alqoritmin realizasiyası

İki ölçülü iki massiv təyin edək.

#define MAX 1001
int a[MAX][MAX], s[MAX][MAX];

Giriş məlumatlarını oxuyuruq.

scanf("%d %d",&n,&m);
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
  scanf("%d",&a[i][j]);

Hissə-hissə cəmləri hesablayırıq.

memset(s,0,sizeof(s));
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
  s[i][j] = s[i][j-1] + s[i-1][j] - s[i-1][j-1] + a[i][j];

Nəticə hissə-hissə cəmlərin massivini çıxarırıq.

for(i = 1; i <= n; i++)
{
  for(j = 1; j <= m; j++)
    printf("%d ",s[i][j]);
  printf("\n");
}