Помогите пожалуйста решить задачку!! Найти номер строки заданной целочисленной матрицы размером 1010, в которой находит-ся самая длинная последовательность, составленная из одинаковых чисел.
Чтобы велосипед заново не строить, воспользовался готовой функцией get_chain, которую можно взять здесь:
http://volvo71.narod.ru/faq_folder/matrices.htm#arr_max
Тогда решение выглядит вот так:
const n = 10;
type
vector = array[1 .. n] of integer;
matrix = array[1 .. n] of vector;
{ Для теста - как константа, можно описать переменной и вводить значения самостоятельно }
const
a: matrix = (
(1, 2, 2, 3, 4, 5, 5, 5, 26, 6),
(1, 2, 2, 3, 4, 8, 5, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 7, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 5, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 5, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 5, 5, 26, 6),
(1, 2, 2, 3, 5, 5, 5, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 5, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 6, 5, 26, 6),
(1, 2, 2, 3, 4, 5, 5, 5, 26, 6)
);
{ ... Здесь должна быть вставлена функция get_chain ... }
var
_max, max_value: integer;
i, ix: integer;
begin
max_value := 0; ix := 0;
for i := 1 to n do begin
get_chain(a[i], n, _max);
if _max > max_value then begin
max_value := _max; ix := i;
end;
end;
writeln('Строка №', ix, ' : ', max_value, ' одинаковых элементов ...');
end.
Немного опоздал, но раз уж потратил свои кровные пять минут на написание, все же выкладываю плоды труда..
Этот фрагмент делает все, что нужно, при этом без посторонних функций. Может, это будет полезно..
m:=1; {максимальная длина}
k:=1; {номер строки с максимально длиной последовательности}
for j:=1 to 10 do begin
n:=1;
for i:=2 to 10 do if a[i,j]=a[i-1,j] then begin
Inc(n);
if n>m then begin
m:=n;
k:=j
end
end
else n:=1
end;
Тогда уже
if a[j, i]=a[j, i - 1] then begin ..., идем ведь по строке, а не по столбцу...