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

диагонали (главная, побочная)

Добавлено: 03 май 2007, 06:35
Oleg_Rus
в двумерном массиве найти сумму элементов находящихся на главной диагонали.

for i:=1 to n do
for j:=1 to n do
if i=j then summa:= summa+a[i, j];

в двумерном массиве найти сумму элементов находящихся на побочной диагонали.

for i:=1 to n do
fro j:=1 to n do
if i+j=n+1 then summa:= summa+a[i, j];

может кто знает более оптимальные способы решения? если да то пожалуйста опубликуйте их для расширения кругозора посетителей. (во как загнул :) ))

Re: диагонали (главная, побочная)

Добавлено: 03 май 2007, 10:09
BBB
Oleg_Rus писал(а):в двумерном массиве найти сумму элементов находящихся на главной диагонали.

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

for i:=1 to n do
  for j:=1 to n do
    if i=j then summa:= summa+a[i, j];
в двумерном массиве найти сумму элементов находящихся на побочной диагонали.

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

for i:=1 to n do
  for j:=1 to n do
    if i+j=n+1 then summa:= summa+a[i, j];
может кто знает более оптимальные способы решения? если да то пожалуйста опубликуйте их для расширения кругозора посетителей. (во как загнул :) ))
Конечно, прведенный алгоритм ОЧЕНЬ неоптимален. Чем больше размерность массива n, тем более не оптимальнее, так как происходит (n в квадрате) проходов по циклу, в то время как просуммировать нужно лишь n чисел.
Достаточно написать так:
Для главной диагонали:

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

summa:= 0;
for i:=1 to n do
  summa := summa + a [i, i];
Для побочной диагонали:

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

summa:= 0;
for i:=1 to n do
  summa := summa + a [i, (n + 1 - i)];