Re: Алгоритм
- From
- Pavel P ()
- To
- Alexey Desyatnik
- Date
- 2002-10-09T08:56:46Z
- Area
- RU.ALGORITHMS
From: "Pavel P" <vprin@indiainfo.com>
"Alexey Desyatnik" <desyatnik@dax.ru> wrote in message
news:3DA2F19C.7060008@dax.ru...
> Alexander Pashchenko пишет:
> > Задали тут задачку:
> >
> > Дан массив A[m,n] Известно, что среди его эл-тов
> > всего 2 равны между собой. Напечатать их индесксы.
> >
> > Как ее правильно решить.
> >
> > Я так думаю, что надо проходить по матрице и сравнивать текущий элемент
с
> > запомненным, исключая сам запомненный. И если они равны вывести индексы.
> > Но вот тут-то я и запутался.
>
> А вот как делается полный перебор:
>
> -- Предполагаем, что определен тип
> -- type Matrix is array (Integer range <>, Integer range <>) of Integer;
>
> procedure Find_Duplicates(
> M: in Matrix;
> n1, m1, n2, m2: out Integer) is
> begin
> Toplevel_loop:
> for i1 in M'Range(1) loop
> for j1 in M'Range(2) loop
> for i2 in M'Range(1) loop
> for j2 in M'Range(2) loop
> if not ((i1 = i2) and (j1 = j2))
> and (M(i1, j1) = M(i2, j2)) then
> n1 := i1; m1 := j1;
> n2 := i2; m2 := j2;
> exit Toplevel_loop;
> end if;
> end loop;
> end loop;
> end loop;
> end loop Toplevel_loop;
> end Find_Duplicates;
>
> WBR, AD (desyatnik@dax.ru)
>
> P.S. Наверняка язык незнаком... :) Это чтоб было не слишком просто.
Язык програмирования Ада. Не зря так назван :)))
Проще надо быть ... проще ... :)
//--- CUT -------------------------------------------------
find_Duplicates arr = find_item_y 0 arr ((limit o sort o flatten) arr)
where
find_item_y _ [] _ = []
find_item_y y [h:t] z = find_item_x y 0 h z ++ find_item_y (y + 1) t z
find_item_x _ _ [] _ = []
find_item_x y x [h:t] z = (if (h == z) [(x,y)] []) ++ find_item_x y (x +
1) t z
Start = find_Duplicates arr
where
arr = [[1, 2, 3, 4], [5, 6, 7, 8], [11, 10, 9, 11]]
//--- CUT -------------------------------------------------
> Ну, думаю, разберешься.
работает с произвольными матрицами (не обязательно даже m*n)
и произвольными типами данных :)))
B.R.
Pavel
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)