Страница 1 из 1

С++ главная и побочная диагоналии

Добавлено: 16 ноя 2013, 15:15
farm95
Приветствую всех!

Есть задача. Дан двумерный массив целых чисел NxN. Найти сумму элементов находящихся в закрашенной области.

Изображение

Допустим матрица у нас будет 5х5.

Код: Выделить всё

#include <vcl.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main ()
{ int s=0, m[5][5], srand(time(0));

for (int i=0; i<5; i++)
{
for (int k=0; k<5; k++)
{ m[i][k]=rand()%10;
cout<<m[i][k]<<" ";
}
cout<<"\n";
}

for (int i=0; i<5; i++)
{
for (int k=0; k<5; k++)

if((i>k)&&(i+k<5-1))
s=s+m[i][k];
}


for (int i=0; i<5; i++)
{
for (int k=0; k<5; k++)
if((i<k)&&(i+k>5-1))
s=s+m[i][k];
}
cout<<"s="<<s;

int end;
cin>>end;
return 0;
}
Эту задачу я смог решить


А вот другая задача. Вопрос такой же, но закрашенная область другая.

Изображение

Вот тут подскажите пожалуйста как решить это задачу. Как тут быть? Найти сначала сумму ниже главной? А как потом другую часть найти?

Re: С++ главная и побочная диагоналии

Добавлено: 17 ноя 2013, 14:46
Romeo
Написал алгоритм на языке, который изобрёл, пока писал алгоритм. Этакая маленькая загадка "Пойми, что я имел в виду". Надеюсь поможет :)

Код: Выделить всё

Сумма = 0;

Цикл i от 0 до N-1
{
   Правая_граница_j = 0;

   Если i <= N/2 то Правая_граница_j = i
   Иначе Правая_граница_j = N-1;

   Цикл j от 0 до Правая_граница_j
   {
      Сумма = Сумма + Массив[i][j];
   }
}

Re: С++ главная и побочная диагоналии

Добавлено: 20 ноя 2013, 11:17
Хыиуду
Если i - номер столбца, а k - номер строки (0,0 - левый верхний угол), то S[i,k] принадлежит закрашенной области, если k>min(N-i, N/2)