Предмет: Информатика, автор: danikgitler

Помогите решить задачу:формирование списка из n элементов Добавление элемента А после второго максимального Удаление повторяющегося второй раз максимального элемента если такого нет ничего не удалять Выполнить сортировку списка по убыванию.После каждой операции, выводить результат на экран


Аноним: А если можно вторым максимальным считать число и меньше абсолютного максимума, то два максимума есть всегда и фраза " если такого нет ничего не удалять" непонятно зачем.
danikgitler: Ну так в задании написано
Аноним: Уважаемый, задание - это Вам дали, а не нам. Ваше дело - опубликовать вопрос так, чтобы было однозначно ясно, что именно требуется сделать.
Аноним: А если Вы просто перемещаете вопрос сюда, а ответ туда, то Вы - лишнее звено в этой цепочке.
danikgitler: Я уточнил, она должна удалять повторяющийся максимальный.А если одинаковых максимальных нету, то ничего не удалять.
danikgitler: Если список (6,89,100,17,5,) то вставляем после 89 , и получается (6,89,71,100,17,5) в таком случаи ничего не удаляем ( поскольку нету повторяющихся максимальных.
danikgitler: А если список (6,89,100,17,5,) то вставляем после 89 , и получается (6,89,100,100,17,5) в таком случаи удаляем вторую сотню.
danikgitler: Или список (6,98,17,5,99) вставляем после 98, вставляем 99 и получаем (6,98,99,17,5,99) и в конце получим (6,98,99,17,5)
Аноним: Т.е. все же вставка после второго от начала элемента, равного максимальному или наиболее близкого к нему.
danikgitler: Вставка после элемента наиболее близкого к максимальному , например если в списке максимальный элемент 63 а наиболее близкий к нему 45 , то вставка после 45 . Независимо от того в какой части списка он стоит

Ответы

Автор ответа: Аноним
2

// PascalABC.NET 3.4.2, сборка 1806 от 30.09.2018

// Внимание! Если программа не работает, обновите версию!

begin

 var L := ReadSeqInteger('Вводите:', ReadInteger('N=')).ToList;

 L.Println; // исходная

 var k := L.OrderDescending.Skip(1).First; // после чего вставить

 var A := ReadInteger('Что вставляем?');

 L.Insert(L.IndexOf(k) + 1, A);

 L.Println; // после вставки

 k := L.Max;

 var ai := L.ToArray.IndexesOf(t -> t = k).ToArray;

 if ai.Count > 1 then

 begin

   L.RemoveAt(ai[1]);

   L.Println; // после удаления, если оно было

 end;

 L := L.SortedDescending.ToList;

 L.Println // после сортировки

end.


danikgitler: Почему он в конце не сортирует по убыванию?
Аноним: Забыл))) Сейчас допишу)))
Аноним: Уже сортирует
danikgitler: Спасибо
Аноним: Пожалуйста. Достаточно было просто сердечко щелкнуть. Тут так принято.
Аноним: Но это Ваше право, конечно.
Похожие вопросы
Предмет: Алгебра, автор: asmi08
Предмет: Алгебра, автор: aseka555
Предмет: История, автор: Katenik167