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

Pascal. Матрицы

Добавлено: 12 янв 2007, 20:33
Tre
Помогите решить задачку! Мне нужен алгоритм решения вот такой задачи: нужно найти максимум среди сумм элементов диагоналей, параллельных побочной диагонали у квадратной матрицы.

Re: Pascal

Добавлено: 13 янв 2007, 13:49
Лелик_1044
Tre,
Ты алгорим как счиать знаешь?
Если да и не знаешь как реализовать на паскале, то дай посмотрю что можно сделать.

Мне ж книги надо поднимать чтоб вспомнить

Re: Pascal

Добавлено: 13 янв 2007, 17:07
Tre
Лелик писал(а):Tre,
Ты алгорим как счиать знаешь?
Если да и не знаешь как реализовать на паскале, то дай посмотрю что можно сделать.

Мне ж книги надо поднимать чтоб вспомнить
Реализовать-то я и сам могу, мне надо сам алгоритм решения! Можешь помочь?

Re: Pascal

Добавлено: 13 янв 2007, 18:26
Хыиуду
Элементы, лежащие на диагоналях, параллельных побочной:
mas[i,alpha-i]
Для каждой диагонали эта alpha своя. Изменяется в пределах от 0 или 1 до удвоенной ширины матрицы. Для каждого элемента - проверка, принадлежит ли он вообще матрице.
Решение дважды неоптимальное, зато простое

Re: Pascal

Добавлено: 14 янв 2007, 14:55
Ramzey
Держи,

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

CONST
  N = 10;
  cMaxWord=1000;
TYPE
  TMatr = array [1..N,1..N] of word;
VAR
  MyMatr : TMatr;
  MaxSum : longint;
  Sum    : longint;
  i,j    : byte;
BEGIN
  randomize;
  for i:=1 to N do
    for j:=1 to N do
      MyMatr[i][j]:=random(cMaxWord);
  {idem do diagonali:}
  MaxSum:=0;
  for i:=1 to N-1 do {N-1 - samu diagonal propuskaem}
    begin
      Sum:=0;
      for j:=1 to i do Sum:=Sum+MyMatr[j,i-j+1];
      if Sum>MaxSum then MaxSum:=Sum
    end;
  {idem posle diagonali:}
  for i:=2 to N do {2 - samu diagonal propuskaem}
    begin
      Sum:=0;
      for j:=i to N do Sum:=Sum+MyMatr[j,N-j+i];
      if Sum>MaxSum then MaxSum:=Sum
    end;
  writeln('Maximum = ',MaxSum);
  readln
END.