основная заковырка тут в том что такие
1 2 3
3 1 2
строки считаются одинаковыми, а так же нужно не забывать о том что в строках могут повторяться элементы
1 1 2
2 1 1
это тоже одинаковые строки...
для этого я ввожу в программу вспомогательный массив флагов, в котором отмечаю уже найденые элементы....
смотрим и разбираемся....
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.
исходники скачиваем тут
Комментариев нет:
Отправить комментарий