Обработка целочисленного набора данных на языке программирования
НАВИГАЦИЯ ПО СТРАНИЦЕ
В данном вопросе мы рассмотрим задания прототипа 17. Решить данные задания мы можем, написав собственную программу на языке Python или используя офисную программу Excel.
Задачи прототипа 17 направлены на различные действия с элементами некой числовой последовательности.
Для решения задания с помощью Excel необходимо знать:
как заполнить столбец числами с определенным шагом через прогрессию;
функции: ЕСЛИ, СЧЕТ, МИН, МАКС, ОСТАТ.
Функция | Пример |
---|---|
= ЕСЛИ(логическое_выражение; значение_если_истина; значение_если_ложь) | =ЕСЛИ(C2=6;1;0) означает следующее: если С2=6, то вернуть 1, в противном случае вернуть 0 |
= СЧЕТ(значение1; [значение2];...) | =СЧЕТ(A2:A7) Подсчитывает количество ячеек, содержащих числа, в диапазоне A2:A7 |
= МИН(число1; [число2];...) | =МИН(A1:A5) Наименьшее из чисел в диапазоне A1:A5 |
= МАКС(число1; [число2];...) | =МАКС(A1:A5) Наибольшее значение в диапазоне A1:A5 |
= ОСТАТ(число; делитель) | =ОСТАТ(-5; -3) Остаток от деления -5/-3. Знак тот же, что и у делителя |
Для написания своей программы необходимо знать:
структуру цикла for и условного оператора;
поиск суммы, количества, произведения элементов.
Пусть необходимо перебрать все целые числа на отрезке [a; b]. Общий вид переборного цикла с некоторым условием записывается на Python так.
Базовые алгоритмы перебора
Поиск количества элементов, удовлетворяющих некоторому условию | Поиск суммы элементов, удовлетворяющих некоторому условию | Поиск произведения элементов, удовлетворяющих некоторому условию |
---|---|---|
|
|
|
Поиск максимального или минимального элемента
Обрабатываем числа на отрезке [a; b] | |
Поиск минимального элемента | Поиск максимального элемента |
---|---|
mn — минимальное число. Изначально mn всегда больше максимально возможного числа. 1 способ:
2 способ:
| mx — максимальное число. Изначально mx всегда меньше минимально возможного числа. 1 способ:
2 способ:
|
Теперь разберем примеры.
Сами задания встречаются в двух вариациях. Различие в том, в каком виде по условию задачи нам дана эта числовая последовательность:
в виде отрезка, указанного в условиях задачи;
в виде файла с числами, записанными построчно.
Задача 1. Рассматривается множество целых чисел, принадлежащих отрезку [2012; 14531], которые делятся на 3 и не делятся на 13, 17, 19 и 21. Найти количество таких чисел и максимальное из них. В ответе записать два числа через пробел: сначала количество, затем максимальное число.
k=0 # изначально количество k обнуляем
mx = 2011 # переменной mx присвоили значение наименьшего элемента -1
for i in range (2012,14532): # перебираем все элементы, принадлежащие заданному отрезку
if i % 3 == 0 and i % 13 != 0 and i % 17 != 0 and i % 19 != 0 and i % 21 != 0 : # если условие выполняется, то
k+=1 # счетчик k увеличиваем на 1
if i > mx: # если элемент, удовлетворяющий всем этим условиям, больше mx, то мы его считаем максимальным
mx = i # и кладем в mx
print (k,mx) # выводим на экран количество и максимальное значение элементов, удовлетворяющих условию
# – комментарий на языке Python
!= обозначает «не равно»
k+=1 то же самое, что k = k+1
Задача 2. Рассматривается множество целых чисел, принадлежащих отрезку [2149; 10579], которые делятся на 3 или на 13 и не делятся на 11, 17, 19 , 21 и 23. Найти количество таких чисел и минимальное из них. В ответе записать два числа через пробел: сначала количество, затем минимальное число.
k=0 # изначально количество k обнуляем
mn = 10580 переменной mn присвоили значение наибольшего элемента +1
for i in range (2149,10580):
if (i % 3 == 0 or i % 13 == 0) and i % 11 != 0 and i % 17 != 0 and i % 19 != 0 and i % 21 != 0 and i % 23 != 0: # если условие выполняется, то
k+=1 # счетчик k увеличиваем на 1
if i < mn: если элемент, удовлетворяющий всем этим условиям, меньше mn, то мы его считаем минимальным
mn = i # и кладем в mn
print (k,mn) # выводим на экран количество и минимальное значение элементов, удовлетворяющих условию
Обратите внимание на скобки в условии. Они здесь потому, что конъюнкция (and) по приоритету сильнее дизъюнкции (or), и в отсутствии скобок в начале выполнится сложное условие i % 13 == 0 and i % 11 != 0 and i % 17 != 0 and i % 19 != 0 and i % 21 != 0 and i % 23 != 0, а потом уже дизъюнкция or i % 3 == 0.