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

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Ответить
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

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

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];

может кто знает более оптимальные способы решения? если да то пожалуйста опубликуйте их для расширения кругозора посетителей. (во как загнул :) ))
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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)];
Ответить