Решение олимпиадных задач на питоне

Вместе с факультетом Python-разработки GeekUniversity собрали для вас несколько простых задач по Python для обучения и тренировки. Их можно решать в любом порядке.

Обратите внимание, что у любой задачи по программированию может быть несколько способов решения. Чтобы посмотреть добавленный нами вариант решения, кликните по соответствующей кнопке. Все приведённые варианты написаны на Python 3.

Задача 1

Есть список a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] .

Выведите все элементы, которые меньше 5 .

Самый простой вариант, который первым приходит на ум — использовать цикл for :

Также можно воспользоваться функцией filter , которая фильтрует элементы согласно заданному условию:

И, вероятно, наиболее предпочтительный вариант решения этой задачи — списковое включение:

print([elem for elem in a if elem

Задача 2

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] ;

b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] .

Нужно вернуть список, который состоит из элементов, общих для этих двух списков.

И снова мы можем воспользоваться циклом for :

Или функцией filter :

Или списковым включением:

result = [elem for elem in a if elem in b]

А можно привести оба списка к множествам и найти их пересечение:

result = list(set(a) & set(b))

Однако в таком случае каждый элемент встретится в результирующем списке лишь один раз, т.к. множество поддерживает уникальность входящих в него элементов. Первые два решения (с фильтрацией) оставят все дубли на своих местах.

Задача 3

Отсортируйте словарь по значению в порядке возрастания и убывания.

Читайте также  При отключении питания ноутбук тускнеет

Импортируем нужный модуль и объявляем словарь:

Сортируем в порядке возрастания:

И в порядке убывания:

result = dict ( sorted ( d . items ( ) , key = operator . itemgetter (1 ) , reverse = True ) )

Задача 4

Напишите программу для слияния нескольких словарей в один.

Допустим, вот наши словари:

Объединить их можно вот так:

А можно с помощью «звёздочного» синтаксиса:

О звёздочном синтаксисе можно прочитать в нашей статье.

Задача 5

Найдите три ключа с самыми высокими значениями в словаре my_dict = <‘a’:500, ‘b’:5874, ‘c’: 560,’d’:400, ‘e’:5874, ‘f’: 20>.

Можно воспользоваться функцией sorted :

Аналогичный результат можно получить с помощью функции nlargest из модуля heapq :

Задача 6

Напишите код, который переводит целое число в строку, при том что его можно применить в любой системе счисления.

Второй аргумент функции int отвечает за указание основания системы счисления:

Задача 7

Нужно вывести первые n строк треугольника Паскаля. В этом треугольнике на вершине и по бокам стоят единицы, а каждое число внутри равно сумме двух расположенных над ним чисел.

Задача 8

Напишите проверку на то, является ли строка палиндромом. Палиндром — это слово или фраза, которые одинаково читаются слева направо и справа налево.

Тут всё просто, достаточно сравнить строку с её обратной версией, для чего можно использовать встроенную функцию reversed:

Того же эффекта можно добиться с помощью срезов:

Задача 9

Сделайте так, чтобы число секунд отображалось в виде дни:часы:минуты:секунды .

Задача 10

Вы принимаете от пользователя последовательность чисел, разделённых запятой. Составьте список и кортеж с этими числами.

Задача 11

Выведите первый и последний элемент списка.

Задача 12

Напишите программу, которая принимает имя файла и выводит его расширение. Если расширение у файла определить невозможно, выбросите исключение.

Задача 13

При заданном целом числе n посчитайте n + nn + nnn.

Читайте также  Почему не работает таобао

Число считается круглым, если на конце его стоит 0. Чем больше нулей на конце, тем более круглым считается число. Если количество нулей одинаково, то большее число считается более круглым.
Упорядочьте заданные числа по уменьшению круглости. Смотрите примеры для уточнения.

Формат файла входных данных:
В первой строке записано число n (1 ≤ n ≤ 1000). Далее в n строках записаны натуральные числа ai (1 ≤ ai ≤ 30000).

Формат файла выходных данных:
Выведите числа в требуемом порядке.

Помогите,не смекаю как их нужно отсортировать
начало у меня пока такое:

  • Вопрос задан более трёх лет назад
  • 684 просмотра

например, число 15600 делите на 10, пока делится без остатка, то есть тут 2 раза.

ну и потом каждый внутренний список сортируете и выводите 15600, 9900, 7890, 1230, 150, то есть возвращаете нули на место и начинаете выводить со списка с наибольшим кол-вом нулей

Хотите улучшить этот вопрос? Update the question so it’s on-topic for Stack Overflow на русском.

Закрыт 3 месяца назад .

Совсем недавно закончился межгалактический турнир по известной онлайн-игре «Defence of the Young». Во время турнира страсти разыгрались не на шутку, и судьи только и успевали, что планировать проведение матчей и следить за соблюдением правил. К несчастью, ни одна команда из галактики Млечный путь не смогла пройти отбор на соревнования, поэтому мы традиционно болели за наших друзей из скопления Андромеды.

Всего в соревнованиях участвовало n команд. Турнир проводился по олимпийской системе, то есть команда выбывала сразу после первого проигрыша. Поскольку на турнире присутствовали команды с самым разным уровнем мастерства, то сетка турнира могла быть совершенно произвольной. В частности, количество участвовавших команд совершенно не обязательно было равно какой-либо степени двойки. Также известно, что никакая команда не играла две игры в один день.

Читайте также  Портативная колонка sven ps 250

К сожалению, во время бурного чествования ставшей победителем команды «Kind Genius», были утеряны записи о самом турнире. Единственная информация, которую смогло найти жюри, это количество матчей, сыгранное в каждый из дней турнира. Жюри просит вас, пользуясь этими данными и информацией о структуре турнира из предыдущего абзаца, восстановить хотя бы значение n — количество команд, участвоваших в турнире.

Входные данные В первой строке входных данных записано целое число k ( 1 ≤ k ≤ 100 000 ) –– количество дней, которое длился межгалактический турнир по DOTY. В следующей строке записаны k неотрицательных целых чисел, не превышающих 10 9 , i -е из них задаёт количество игр, сыгранных в i -й день турнира.

Выходные данные Выведите единственное целое число n — количество команд, участвовавших в турнире. Гарантируется, что n может быть однозначно восстановлено по входным данным и будет не больше 10 9 . Также гарантируется, что в турнире участвовала хотя бы одна команда.

Примечание Одной из возможных сеток турнира во втором примере является:

Первая и вторая команда играют матч в первый день. Победитель первого матча играет с третьей командой во второй день. Победитель второго матча играет в финале с четвёртой командой в третий день соревнований. Примеры входные данные 3 2 2 1 выходные данные 6 входные данные 5 0 1 0 1 1 выходные данные 4

Ссылка на основную публикацию
Adblock
detector