profile
Размещено 3 года назад по предмету Информатика от ashotakopyanworks

Готовя файл для вступительного экзамена, аспирант Сидоров сделал следующее:

- Заполнил случайными целыми числами массив из N элементов.

- Создал второй массив, из 2N элементов, и поместил туда элементы первого массива, каждый - в двух экземплярах.

- Программными средствами перемешал массив.

- Записал в текстовый файл все элементы второго массива, кроме последнего (по одному в строке).

Требуется по содержимому файла найти то число, которое в него не попало, т.к. было последним в массиве. Известно, что в массиве до 20000 элементов, а числа, которыми он заполнялся, не больше 10000. Опишите словесно идею алгоритма решения этой задачи. Постарайтесь предложить алгоритм, эффективный по времени и памяти.

  1. Ответ на вопрос
    Ответ на вопрос дан SheWhoRunsOnTheWaves

    Ответ:

    В этой задаче непонятно, могут ли числа быть отрицательными.

    Предположим, что нет, т.к. указано только ограничение сверху (числа меньше или равны 10000).

    Могу предложить такой алгоритм:

    1. Считаем данные в массив (назовем его original).

    2. Создадим еще один массив (пока заполненный нулями) на 10001 элемент (учитываем 0). Его назовем counter.

    3. Будем идти по массиву original, брать каждое число и прибавлять 1 в соответствующую ячейку counter, номер которой равен текущему числу.

    Пример:

    Пусть в нулевой ячейке массива original лежит число 100. Тогда прибавляем 1 к значению сотой ячейки counter. В следующей ячейке original пусть лежит 135. Тогда идем в 135-ую ячейку массива counter и прибавляем 1.

    4. В итоге мы будем знать, сколько каких дано элементов.

    5. Надо найти у какого значения не хватает пары. "Не хватает пары" в данном случае будет означать, что в соответствующей ячейке counter будет лежать нечетное число (если числа не могут повторяться, то это будет число 1, а в остальных ячейках 2; но мы не можем быть уверены, что числа не повторяются, поэтому решим в более общем виде).

    6. Поэтому пройдемся по массиву

    counter, проверяя каждую ячейку на четность. Только встречаем нечетную ячейку, сразу выводим ее номер и прекращаем выполнение программы (она такая одна).

    Если все-таки там могут быть отрицательные числа (а ограничение по модулю), то надо просто ввести еще один массив negative_counter (10001 ячейка). Ноль в нем надо игнорировать (уже подсчитывается в обычном counter вместе с положительными числами), а при проходе массива original делать сначала проверку на положительное/отрицательное значение и при обращении к номеру ячейки negative_counter через значение текущей ячейки original не забывать ставить минус или модуль (будет что-то вроде negative_counter[-original[i]] += 1 или negative_counter[abs(original[i])] += 1). Потом пройти два массива (по очереди) с проверкой на четность. При выводе тоже не забыть про минус, если без пары окажется отрицательное число.

    Плюсы алгоритма: он линейный.

    Минусы: создаем лишний массив, т.е. используем лишнюю память.

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.