Списки

Упражнения

Во всех задачах этого листка программа получает на вход строку из целых чисел, разделенных пробелами. В конце строки также могут быть пробелы. Данную строку необходимо считать в список целых чисел.

A: Четные индексы

Выведите все элементы списка с четными индексами (то есть A[0], A[2], A[4], ...).

В этой задаче нельзя использовать инструкцию if.

Ввод Вывод
1 2 3 4 5
1 3 5

B: Четные элементы

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

Ввод Вывод
1 2 2 3 3 3 4
2 2 4

C: Больше предыдущего

Дан список чисел. Выведите все элементы списка, которые больше предыдущего элемента.

Ввод Вывод
1 5 2 4 3
5 4

D: Первый положительный

Выведите индекс первого положительного элемента в данном списке. Он обязательно есть в списке.

В этой задаче нельзя пользоваться инструкцией if. Элементы списка нужно просматривать с начала до нахождения нужного элемента.

Ввод Вывод
-1 0 1
2
1
0

E: Первый положительный - 2

Выведите индекс первого положительного элемента в данном списке. Если такого элемента нет, программа должна вывести число -1.

В этой задаче нельзя пользоваться инструкцией if внутри цикла.

Ввод Вывод
-1 0 1
2
0
-1

F: Наибольший элемент

Дан список чисел. Выведите значение наибольшего элемента в списке, а затем индекс этого элемента в списке. Если наибольших элементов несколько, выведите индекс первого из них. Гарантируется, что в списке есть хотя бы один элемент.

Ввод Вывод
1 2 3 2 1
3 2

G: Больше своих соседей

Дан список чисел. Определите, сколько в этом списке элементов, которые больше двух своих соседей и выведите количество таких элементов.

Ввод Вывод
1 0 1 0 1
1

H: Наименьший положительный

Выведите значение наименьшего из всех положительных элементов в списке. Известно, что в списке есть хотя бы один положительный элемент, а значения всех элементов списка по модулю не превосходят 1000.

Ввод Вывод
5 -4 3 -2 1
1

I: Ближайшее число

Дан список чисел и некоторое число. Найдите в данном списке элемент, ближайший к заданному.

В первой строке заданы элементы списка (целые числа, не превосходящие по модулю \(10^9\)). Гарантируется, что в списке есть хотя бы один элемент.

Во второй строке дано одно целое число \(x\), не превосходящее по модулю \(10^9\)

Выведите значение элемента списка, ближайшее к \(x\). Если таких чисел несколько, выведите первое из них.

Ввод Вывод
6 5 4 2 1
3
4
1 2 4 5 6
3
2
1 2 3
2
2

J: Шеренга

Андрей перешёл в другую школу. На уроке физкультуры ему понадобилось определить своё место в строю. Помогите ему это сделать.

Программа получает на вход невозрастающую последовательность натуральных чисел, означающих рост каждого человека в строю. После этого вводится число X — рост Андрея. Все числа во входных данных натуральные и не превышают 200.

Выведите номер, под которым Андрей должен встать в строй. Если в строю есть люди с одинаковым ростом, таким же, как у Андрея, то он должен встать после них.

В этой задаче нельзя использовать цикл for, инструкцию break, инструкцию if. Задача решается одним циклом while.

Ввод Вывод
165 163 160 160 157 157 155 154
162
3
165 163 160 160 157 157 155 154
160
5

K: Количество различных элементов

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

Ввод Вывод
1 2 2 3 3 3
3

L: Наименьший нечетный

Выведите значение наименьшего нечетного элемента списка, а если в списке нет нечетных элементов — выведите число 0.

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

В решении этой задачи нельзя использовать вспомогательный список.

Ввод Вывод
0 1 2 3 4
1
2 4 6 8 10
0

M: Переставить в обратном порядке

Переставьте элементы данного списка в обратном порядке, затем выведите элементы полученного списка.

Вам нужно не просто вывести элементы списка от первого до последнего, а требуется изменить значения элементов самого списка, поменяв местами A[0] c A[n - 1], A[1] с A[n - 2], а затем вывести элементы списка подряд с начала.

В этой задаче нельзя использовать срезы и вспомогательный список.

Ввод Вывод
1 2 3 4 5
5 4 3 2 1

N: Переставить соседние

Переставьте соседние элементы списка (A[0] c A[1], A[2] c A[3] и т.д.). Если элементов нечетное число, то последний элемент остается на своем месте.

В решении этой задачи нельзя использовать вспомогательный список.

Ввод Вывод
1 2 3 4 5
2 1 4 3 5

O: Переставить min и max

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

Ввод Вывод
3 4 5 2 1
3 4 1 2 5

P: Соседи одного знака

Дан список чисел. Если в нем есть два соседних элемента одного знака (то есть оба положительных или оба отрицательных), выведите эти числа. Если соседних элементов одного знака нет - не выводите ничего. Если таких пар соседей несколько - выведите первую такую пару.

В этой задаче нужно использовать цикл while, нельзя использовать инструкции break и инструкцию if внутри цикла.

Ввод Вывод
-1 2 3 -1 -2
2 3

Q: Циклический сдвиг вправо

Циклически сдвиньте элементы списка вправо (A[0] переходит на место A[1], A[1] на место A[2], ..., последний элемент переходит на место A[0]).

В этой задаче нельзя использовать срезы и вспомогательный список.

Гарантируется, что в списке есть хотя бы один элемент.

Задача должна быть решена с использованием минимально возможного количества операций присваивания (при этом операция присваивания вида a, b = b, a считается за две операции).

Ввод Вывод
1 2 3 4 5
5 1 2 3 4

R: Количество совпадающих пар

Дан список чисел. Посчитайте, сколько в нем пар элементов, равных друг другу. Считается, что любые два элемента, равные друг другу образуют одну пару, которую необходимо посчитать.

Ввод Вывод
1 2 3 2 3
2
1 1 1 1 1
10

S: Два ближайших

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

Программа должа вывести два числа: индексы двух элементов массива, абсолютная величина разности которых минимальна.

Ввод Вывод
7 0 4 2 5 9
2 4

T: Количество различных элементов - 2

Дан список. Посчитайте, сколько в нем различных элементов, не изменяя самого списка, не используя дополнительные списки (или строки) и срезы.

Ввод Вывод
3 2 1 2 3
3

U: Медиана

В списке — нечетное число элементов, при этом все элементы различны. Найдите медиану списка: элемент, который стоял бы ровно посередине списка, если список отсортировать.

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

Программа должна вывести единственное число — значение медианного элемента в списке.

Ввод Вывод
6 1 9 2 3 4 8
4

V: Уникальные элементы

Дан список. Выведите те его элементы, которые встречаются в списке только один раз. Элементы нужно выводить в том порядке, в котором они встречаются в списке.

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

Ввод Вывод
1 2 2 3 3 3
1

W: Самое частое число

Дан список. Не изменяя его и не используя дополнительные списки, определите, какое число в этом списке встречается чаще всего.

Если таких чисел несколько, выведите любое из них.

Ввод Вывод
1 2 3 2 3 3
3

X: Числа \(k\)-боначчи

Назовем последовательность чисел последовательностью \(k\)-боначчи, если каждый элемент этой последовательности является суммой \(k\) предыдущих членов последовательности. В частности, последовательность \(2\)-боначчи является последовательностью Фибоначчи.

Более формально, \(i-й\) элемент последовательности \(k_i\) равен 1, если \(0\le i\le k - 1\) и равен сумме \(k\) предыдущих членов последовательности \(k_{i-1} + k_{i-2} + ... + k_{i-k}\) при \(i\ge k\).

Даны два числа \(k\) и \(n\) (\(k\ge 2\), \(n\ge0\)). Вычислите \(n\)-й член последовательности \(k\)-боначчи \(k_n\).

Ввод Вывод
3 6
17
100 0
1

Y: Кузнечики

\(N\) кузнечиков стоят в ряд. Для каждого кузнечика задана числовая характеристика — длина его прыжка. Если длина прыжка кузнечика равна \(l\), то он за один прыжок перепрыгивает через \(l\) других кузнечиков.

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

В первой строке входных данных задана расстановка кузнечиков (длины их прыжков). Во второй строке входных данных задано число секунд \(t\). Опеределите и выведите на экран расстановку кузнечиков через \(t\) секунд. Все длины прыжков — натуральные числа, меньшие, чем число кузнечиков в ряду.

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

Ввод Вывод
1 2 3 4 2
2
4 1 2 2 3

Z: Ферзи

Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг друга. Вам дана расстановка 8 ферзей на доске, определите, есть ли среди них пара бьющих друг друга.

Программа получает на вход восемь пар чисел, каждое число от 1 до 8 - координаты 8 ферзей. Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

Ввод Вывод
1 7
2 4
3 2
4 8
5 6
6 1
7 3
8 5
NO
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
YES