1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Помогите плз.: Нужно найти максимальное из чисел встрчающихся в односвязном списке более одного раза. Мой способ(см ниже) не пашет, что не так? HE-E-E-E-LP мозг закипает :ypr:
Код
buff:=base; buff1:=base^.next; For i:=1 to n-1 begin while buff1^.next<>nil do begin if buff^.data=buff1^.data then if buff^.data>max then max:=buff^.data; buff1:=buff1^.next end; buff:=buff^.next end;
max := 0; buff := base; while buff <> nil do begin count := 0; p := buff^.next; while p <> nil do begin { ищем повторы элемента buff^.data } if p^.data = buff^.data then inc(count); p := p^.next; end;
{ если есть повторы, то сравниваем элемент buff^.data с текущим максимумом } if (count > 0) and (buff^.data > max) then max := buff^.data
klem4, я не думаю что в FAQ что-нибудь подобное есть, потому что невозможно предусмотреть все варианты (сегодня кому-то понадобилось найти максимум в матрице, завтра понадобится найти максимальное из чисел, встречающихся в матрице ровно 3 раза, послезавтра - ...) Вариантов очень много.
-Katrin-, я бы рассматривал матрицу (1 .. M x 1 .. N) как одномерный массив размером 1 .. MxN (что очень просто реализуется директивой Absolute), сортировал бы его по убыванию каким-нибудь из быстрых алгоритмов, и искал первый элемент от начала массива, встречающийся более 1-го раза...
Так по крайней мере (если не пользоваться "пузырьком"), этого можно добиться меньше чем за (M*N)^2 операций, что гарантировано при простом поиске в матрице...
var y:array[1..n*m] of integer; i,j:integer; count,temp:integer; flag:boolean; Begin
clrscr;
count:=0;
for i:=1 to n do begin writeln; writeln; for j:=1 to m do begin write(x[i,j]:2,' '); inc(count); y[count]:=x[i,j]; //Заполнение массивы элементами матрицы end;
end;
repeat // Сортировка flag:=true; for i:=1 to count-1 do if not(y[i]>=y[i+1]) then begin temp:=y[i]; y[i]:=y[i+1]; y[i+1]:=temp; flag:=false; end; until flag;
writeln;
i:=1;
flag:=false;
while(i<=count-1)and not(flag) do // Поиск max элемента, встречающегося >1 раза if y[i]=y[i+1] then flag:=true else inc(i);
writeln;
if flag then writeln('Result = ',y[i]) else writeln('No');
readln;
End.
ps про absolute не нашел как делать, по этому вручную заполнил массив.
Сообщение отредактировано: klem4 -
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
for i:=1 to n do begin writeln; writeln; for j:=1 to m do begin write(x[i,j]:2,' '); inc(count); y[count]:=x[i,j]; //Заполнение массивы элементами матрицы end;
end;
я бы сделал так:
type arrType = array[1 .. m*n] of integer; var y:arrType absolute x; { не правда ли, проще? }
и (читай внимательнее мое сообщение ;) ) не использовал бы "пузырек", лучше что-нибудь более быстрое...