Объясняю свой алгоритм решения данного задания. Берём и запихиваем все строки в двумерный чар массив. Потом построчно сравниваем i-j элемент столбца с i+1-j. Если это одинаковые символы - мы прибавляем к счётчику +1. Потом сравниваем i-j+1 и i+1-j+1, если они равны, то мы прибавляем +1 при условии того, что один из этих элементов равен одному из предыдущих Ну а потом если наш счётчик составляет 2 - мы уже знаем что этот узор не симпатичный. В противном же случае мы идём дальше до size-1. (в нашем случае size=4 поэтому 4-1=3) Скриншот с результатом работы, скоростью и самим кодом прикрепил. UPD: Ещё можешь уменьшить кол-во итераций, во втором цикле в условии можно сделать strlen(a[i])-1
PascalABC.NET 3.4.0, сборка 1675 от 12.06.2018 Внимание! Если программа не работает, обновите версию!
procedure MatrixCreate(m,n:integer; var A:array[,] of integer); begin A:=MatrRandom(m,n,-50,50); end;
procedure MatrixOutput(A:array[,] of integer); begin A.Println(4) end;
begin var (m,n):=ReadInteger2('Количество строк и столбцов в матрице:'); var a:array[,] of integer; MatrixCreate(m,n,a); Writeln('*** Исходная матрица ***'); MatrixOutput(a); a.Transform(t->t>0?1:t); Writeln('*** Полученная матрица ***'); MatrixOutput(a); end.
Берём и запихиваем все строки в двумерный чар массив.
Потом построчно сравниваем i-j элемент столбца с i+1-j. Если это одинаковые символы - мы прибавляем к счётчику +1.
Потом сравниваем i-j+1 и i+1-j+1, если они равны, то мы прибавляем +1 при условии того, что один из этих элементов равен одному из предыдущих
Ну а потом если наш счётчик составляет 2 - мы уже знаем что этот узор не симпатичный.
В противном же случае мы идём дальше до size-1. (в нашем случае size=4 поэтому 4-1=3)
Скриншот с результатом работы, скоростью и самим кодом прикрепил.
UPD:
Ещё можешь уменьшить кол-во итераций, во втором цикле в условии можно сделать strlen(a[i])-1