IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Одномерный массив - вроде бы просто?
сообщение
Сообщение #1


Гость






Ребят помогите пожалуйста, второй день голову ломаю, что-то никак не выходит!
Найти три наименьших по значению элемента одномерного массива (равные не учитывать) целых чисел, введеных с клавы. Заменить их на соответствующие им индексы.
Спасибо
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Простите за откровенный оффтоп (в 3 часа ночи как-то на всё пофиг). wacko.gif
Паскаль было лень запускать (в студии проект ваял), да к тому же корректный ответ уже был размещён...
Мне просто не понравилось обилие вложенных циклов в предложенных алгоритмах. Попробовал обойтись одним-двумя.
Код

// возвращаем последовательность пар: минимум-индекс
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 первых неравных элементов...... но я уснул на клаве......


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 10:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name