Другие языки программирования и технологии

Задана последовательность, содержащая n целых чисел. Необходимо найти число паскаль

Вот решение, только не через файлы, а через ввод N и рандомное заполнение списка:
type pType = ^rType; rType = record N : Integer; Pred, Next : pType; end;
var First, Last, Cur, Tmp : pType; N, K : Word; Nmax, Ntmp : Integer; Kmax, Ktmp : Word;
begin
Write('N = '); ReadLn(N);
{ заполняем случайными числами }
Randomize; New(First); First^.N := Random(101) - 50; First^.Pred := nil; First^.Next := nil; Last := First;
for K := 2 to N do begin New(Cur); Cur^.N := Random(101) - 50; Cur^.Pred := Last; Cur^.Next := nil; Last^.Next := Cur; Last := Cur; end;
{ выводим исходные данные }
Write('Исходные данные: '); Cur := First; repeat Write(#32, Cur^.N); Cur := Cur^.Next; until Cur = nil; WriteLn;
{ считаем количество вхождений и ищем максимальное число с наибольшим числом вхождений }
Cur := First; Nmax := Cur^.N; Kmax := 0;
repeat Ntmp := Cur^.N; Ktmp := 0; Tmp := Cur;
repeat if Tmp^.N = Ntmp then Inc(Ktmp); Tmp := Tmp^.Next; until Tmp = nil;
if (Ktmp > Kmax) or ((Ktmp = Kmax) and (Ntmp > Nmax)) then begin Kmax := Ktmp; Nmax := Ntmp; end; Cur := Cur^.Next; until Cur = nil;
{ перенесём все значения Nmax в конец }
Cur := Last^.Pred; repeat if Cur^.N = Nmax then begin Tmp := Cur; Cur := Cur^.Pred; Cur^.Next := Tmp^.Next; Tmp^.Next^.Pred := Cur; Last^.Next := Tmp; Tmp^.Next := nil; Tmp^.Pred := Last; Last := Tmp; end else Cur := Cur^.Pred; until Cur = nil;
{ выводим результат }
Write('Полученные данные: '); Cur := First; repeat Write(#32, Cur^.N); Cur := Cur^.Next; until Cur = nil; WriteLn;
{ хорошим тоном будет - освобождение памяти }
Cur := First; repeat Tmp := Cur; Cur := Cur^.Next; Dispose(Tmp); until Cur = nil;
end.
Если хоть чуть-чуть волокёшь - переделать не составит труда!
Stable08
Stable08
71 839
Лучший ответ
надо сначала считать эти числа в одномерный массив, потом создать пустой двумерный и заполнить его таким образом: пишем первое число из первого массива первым элементом первой строки второго. Второй элемент строки пока равен 1. Если следующее число из 1 массива не встречается в первом столбце 2 массива, дописываем его в новую строку, иначе увеличиваем второй столбец соответствующей строки на 1. После проверки 1 массива сортируем 2 массив по убыванию 2 столбца. Проверяем, есть ли одинаковые элементы в начале 2 столбца, и если да - сортируем их по убыванию 1 столбца. Получаем искомое число.
После этого в первом массиве находим эти числа и перемещаем их в конец.
Максим Новиков
Максим Новиков
54 799
пиши в агент или icq 452371863
NU
Nurbolat Utebaev
68 014

Похожие вопросы