Matrix36. Дана целочисленная матрица размера $$M \times N$$, элементы которой могут принимать значения от $$0$$ до $$100$$. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
program Matrix36; var a:array [1..10,1..10] of integer; Num, M, N, i, j:Integer; Line1,LineM : set of byte; begin Write('N: '); Readln(N); Write('M: '); Readln(M); for i:=1 to M do begin writeln(i,': '); for j:=1 to N do begin Write(j,' : '); Read(a[i,j]); end; end; Line1:=[]; for j:=1 to N do Line1:=Line1+[a[1,j]]; Num:=0; for i:=2 to M do begin LineM:=[]; for j:=1 to N do LineM:=LineM+[a[i,j]]; if Line1=LineM then inc(Num); end; Writeln(Num); end. |
Другие задачи из раздела Matrix можно посмотреть здесь.
Рабочий код данной задачи без мало известного множественного типа данных. Строки(и первую и текущую) записываем в одномерные массивы, сортируем и сравниваем поэлементно с массивом, в котором находится отсортированная первая строка. При совпадении всех элементов — выводим номер строки…
Но получается строка «1 1 1 1 2» не похожа на «1 2 2 2 2»?
а что за тип вы использовали в коде set of byte??в первый раз такое вижу
Set это множества. В паскале это очень крутая штука.. в теории элементы не имеют порядка и просто как бы есть ) но можно посмотреть наличие элементов в множестве и добавить или удалять элементы из множества
то есть как я понял это что-то типа массива??
И да и нет, смотря как посмотреть ) по элементам множества нельзя пробежать и посмотреть каждое ) зато можно набивать множество элементами и смотреть есть конкретный элемент в множестве или нет )