пятница, 26 июня 2009 г.

найти номера строк, элементы в каждой из которых одинаковы между собой

дан двумерный квадратный массив. найти номера строк, элементы в каждой из которых одинаковы между собой.

основная заковырка тут в том что такие

1 2 3

3 1 2

строки считаются одинаковыми, а так же нужно не забывать о том что в строках могут повторяться элементы

1 1 2

2 1 1

это тоже одинаковые строки...

для этого я ввожу в программу вспомогательный массив флагов, в котором отмечаю уже найденые элементы....

смотрим и разбираемся....



const
N = 4;

var
a: array [1..N, 1..N] of integer;
b: array [1..N] of boolean; {вспомогательный массив флагов}
i, j, k, m: integer;
f1, f2: boolean;

begin
{инициализация массива случайными числами}
for i:=1 to N do begin
for j:=1 to N do begin
a[i,j]:=random(3);
end;
end;

{печать массива на экран}
for i:=1 to N do begin
for j:=1 to N do begin
write(a[i, j]:2);
end;
writeln;
end;
writeln;

{ищем совпадения по строчно}
for i:=1 to N do begin
write('строка ', i, ': ');

for j:=1 to N do begin
{саму с собой не проверяем}
if i = j then continue;

{сбросим вспомогательный массив флагов}
for k:=1 to N do begin
b[k]:=false;
end;

f1:=true; {предположим i-я строка равна j-й}
for k:=1 to N do begin
f2:=false; {предположим k-й элемент i-той строки есть в j-й строке }
for m:=1 to N do begin
if (a[i, k] = a[j, m]) and (b[m] = false) then begin
b[m]:=true; {таки есть, отметим это флагом}
f2:=true; {и переходим к след. символу}
break;
end;
end;

if not f2 then begin {символ не найден!}
f1:=false; {строки не равны!}
break;
end;
end;

if f1 = true then begin {строки равны}
write(j:2); {отметим этот факт выводом на экран}
end;
end;
writeln;
end;
writeln;
end.


исходники скачиваем тут

Комментариев нет:

Отправить комментарий