1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Petruxa |
Сообщение
#1
|
|
Гость |
Ребят помогите пожалуйста, второй день голову ломаю, что-то никак не выходит!
Найти три наименьших по значению элемента одномерного массива (равные не учитывать) целых чисел, введеных с клавы. Заменить их на соответствующие им индексы. Спасибо |
![]() ![]() |
| hardcase |
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Простите за откровенный оффтоп (в 3 часа ночи как-то на всё пофиг).
Паскаль было лень запускать (в студии проект ваял), да к тому же корректный ответ уже был размещён... Мне просто не понравилось обилие вложенных циклов в предложенных алгоритмах. Попробовал обойтись одним-двумя. Код // возвращаем последовательность пар: минимум-индекс public static IEnumerable<KeyValuePair<int,int>> FindMins(int minsCount, IEnumerable<int> sequence) { int min = default(int); // максимальный минимум Dictionary<int, int> dict = new Dictionary<int, int>(); int index = -1; // счётчик итераций foreach (int item in sequence) { index++; // забиваем словарь первыми minsCount элементами последовательности if (dict.Count < minsCount && !dict.ContainsKey(item)) { dict.Add(item, index); min = (min != default(int) ? (min < item ? item : min) : item); continue; } // если следующий элемент меньше текущего (максимального) минимума // перетряхиваем словарь if (item < min && !dict.ContainsKey(item)) { dict.Remove(min); // удаляем старый минимум dict.Add(item, index); // добавляем новый // обновляем максимальный минимум min = item; foreach (int dictItem in dict.Keys) { min = min < dictItem ? dictItem : min; } } } return dict; // возвращаем последовательность минимальных элементов и их индексов } Полагаю из имён методов ясно их назначение. Кроме того можно избавиться от вложенного цикла, используя сортированный список из ключей. Ещё была мысль тупо отсортировать по возрастанию массив квик-сортом с сохранением начальных позиций элементов, а потом взять minsCount первых неравных элементов...... но я уснул на клаве...... -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Petruxa Одномерный массив - вроде бы просто? 14.03.2007 13:25
Lapp Вот такой код, вроде, должен работать (не проверял… 14.03.2007 14:04
klem4 const
n = 4;
type
TArray = array [1..n] of Inte… 14.03.2007 14:14
Petruxa 'klem4' - огромное спасибо, всё работает… 14.03.2007 14:36
Lapp Да, схема Klem4 лучше.. :)
Свою я исправил (надо и… 14.03.2007 14:33
Petruxa а может лучше выложить Ваш код?
очень интересно... 14.03.2007 14:38
Lapp И еще одна: надо подсчитывать количество минимумов… 14.03.2007 14:40
Гость помоему код klem4 проще и понятней, а особых изыск… 14.03.2007 15:32
Lapp
помоему код klem4 проще и понятней, а особых изыс… 14.03.2007 15:52
volvo Я бы сделал вот это (для общего случая, а не тольк… 14.03.2007 16:15
Lapp Пока смотрел код volvo, нашел еще одну ошибку у се… 14.03.2007 16:28
klem4
У меня то учитывается:
Единственное можно еще… 14.03.2007 16:39
Lapp Проверь на массиве 1, 2, 3, 4
Твоя прога выдает ин… 14.03.2007 16:46
klem4 Действительно, тогда вот что сочинил:
for j := 1 … 14.03.2007 17:09
Lapp
Действительно, тогда вот что сочинил:
Можно и та… 14.03.2007 17:44![]() ![]() |
|
Текстовая версия | 25.05.2026 21:28 |