Статья Автор: Лебедев Дмитрий

TUZ_2-03 Создание отсортированного списка целых чисел для задачи выбора Брюсселя

TUZ_2-03 Создание отсортированного списка целых чисел для задачи выбора Брюсселя
Задача 50205

TUZ_2-03 Создание отсортированного списка целых чисел для задачи выбора Брюсселя
2.3. Создание отсортированного списка целых чисел для задачи выбора Брюсселя
В этой задаче необходимо написать функцию, которая принимает положительные целые числа n, mink и maxk и генерирует отсортированный список всех положительных целых чисел, образованных подмножеством цифр m исходного числа, которые либо в 2 раза больше m, либо в 2 раза меньше. Значения в получившемся списке должны следовать в порядке возрастания, при этом подмножество m должно попадать в диапазон значений от mink до maxk.
В табл. 2.3 показаны ожидаемые результаты для некоторых входных данных.
Таблица 2.3. Некоторые ожидаемые результаты для разных входных значений в задаче выбора Брюсселя
n, mink, maxk Ожидаемый результат
10, 2, 5 [5, 20]
9, 1, 4 [18]
47, 1, 1 [27, 87, 414]
100, 84, 99 []

Алгоритм
Алгоритм решения задачи создает список, выполняя определенные операции с цифрами входного числа n. Указанные операции включают деление или умножение подмножества цифр на 2 в зависимости от того, представляет подмножество четное или нечетное целое число.
Впоследствии полученный список чисел сортируется в порядке возрастания. Для поиска решения используется следующий алгоритм.
1. Алгоритм принимает три параметра: n, mink и maxk.
2. Создается пустой список с именем result.
3. Входное целое число n преобразуется в список его цифр с использованием генератора списков и сохраняется в переменной digits.
4. Далее выполняется цикл, перебирающий значения k в диапазоне от mink до maxk+1.
5. Для каждого значения k выполняется цикл по i от 0 до len (digits)-k+1.
6. Из списка digits извлекается срез от i до i+k–1, этот срез преобразуется в целое число, которое затем сохраняется в переменной digit.
7. Если digit – четное число, то оно делится на два, и результат сохраняется в переменной half_digit.
8. Создается новый список с именем new_digits, состоящий из первых i элементов списка digits, за которыми следуют цифры из half_digit и потом оставшиеся элементы из digits.
9. Список new_digits преобразуется в целое число и сохраняется в переменной new_num.
10. Число new_num добавляется в список result.
11. Значение digit умножается на 2, и результат сохраняется в переменной с именем nd.
12. Создается новый список с именем new_digits, состоящий из первых i элементов списка digits, за которыми следуют цифры из new_digit и потом оставшиеся элементы из digits.
13. Список new_digits преобразуется в целое число и сохраняется в переменной new_num.
14. Значение new_num добавляется в конец списка result.
15. Список result сортируется в порядке возрастания с использованием алгоритма сортировки вставками.
16. И полученный отсортированный список result возвращается вызывающему коду.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать