Анализ информационных моделей. Однозначное соотнесение таблицы и графа
i
На рисунке схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
П1
П2
П3
П4
П5
П6
П7
П1
30
3
5
П2
21
13
П3
39
53
2
П4
30
21
П5
3
39
8
П6
13
53
8
П7
5
2
Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта D в пункт G и из пункта A в пункт C. В ответе запишите целое число.
Решение. Заметим, что G — единственная вершина степени 3, не имеющая общих дорог с вершинами степени 2. Следовательно, G соответствует пункту П5.
Пункт Е — единственная вершина степени 2, не имеющая общих дорог с вершинами степени 2. Следовательно, Е соответствует пункту П7.
Пункт С — единственная вершина степени 3, имеющая две общие дороги с вершинами степени 2. Следовательно, С соответствует пункту П1. Тогда пункт F соответствует пункту П3.
Пункт А соответствует пункту П4. Пункт B соответствует пункту П2. Пункт D соответствует пункту П6.
Значит, сумма протяжённостей дорог из пункта D в пункт G и из пункта А в пункт C равна 8 + 30 = 38.
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
???
???
???
???
F
1
0
0
0
1
0
0
0
Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Функция F задана выражением ¬x ∨ y, зависящим от двух переменных, а фрагмент таблицы имеет следующий вид.
???
???
F
0
1
0
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Решение. Составим таблицу истинности для выражения
((w → y) → x) ∨ ¬z,
вручную или при помощи языка Python:
print("x y z w")
for x in range(0, 2):
for y in range(0, 2):
for z in range(0, 2):
for w in range(0, 2):
if not(((w <= y) <= x ) or (not (z))):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z, w.
Получим следующие наборы:
(0, 0, 1, 0),
(0, 1, 1, 0),
(0, 1, 1, 1).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Заметим, что только первый столбец не содержит значение 0. Следовательно, первый столбец соответствует переменной z. Тогда третья строка может соответствовать только набору (0, 1, 1, 0). Следовательно, второй столбец соответствует переменной y. Тогда первая строка может соответствовать только набору (0, 1, 1, 1). Следовательно, четвертый столбец соответствует переменной x. Тогда третий столбец соответствует переменной w.
Поиск информации в реляционных базах данных. Задания для подготовки
i
В файле приведён фрагмент базы данных «Кондитерские изделия» о поставках конфет и печенья в магазины районов города. База данных состоит из трёх таблиц.
Таблица «Движение товаров» содержит записи о поступлении товаров со склада в магазины в течение августа 2023 г., а также информацию о проданных товарах. Поле Тип операции содержит значение Поступление или Продажа, а в соответствующее поле Количество упаковок, шт. внесена информация о том, сколько упаковок товара поступило в магазин или было продано по итогам дня. Заголовок таблицы имеет следующий вид.
ID операции
Дата
ID магазина
Артикул
Количество упаковок, шт.
Тип операции
Таблица «Товар» содержит информацию об основных характеристиках каждого товара. Заголовок таблицы имеет следующий вид.
Артикул
Отдел
Наименование
Ед. изм.
Количество в упаковке
Цена за упаковку
Таблица «Магазин» содержит информацию о местонахождении магазинов. Заголовок таблицы имеет следующий вид.
ID магазина
Район
Адрес
На рисунке приведена схема указанной базы данных.
Используя информацию из приведённой базы данных, определите общую массу (в кг) всех видов зефира, полученных магазинами, расположенными на проспекте Революции, за период со 2 по 10 августа включительно.
В ответе запишите только число.
Решение. Открыв файл, перейдём на лист «Движение товаров». Озаглавим столбец G «Улица», столбец H — «Товар», а столбец I — «Вес».
В ячейке G2 введем формулу =ВПР(C2;Магазин!A:C;3;0) и скопируем формулу до конца списка.
В ячейке H2 введем формулу =ВПР(D2;Товар!A:F;3;0) и скопируем формулу до конца списка.
В ячейке I2 введем формулу =ВПР(D2;Товар!A:F;5;0) и скопируем формулу до конца списка.
В результате получим единую таблицу:
Воспользуемся стандартными средствами редактора Microsoft Excel: требуется отфильтровать записи в таблице, оставив только записи для товара «Зефир», тип операции «Поставка», дата с 2 по 10 августа, магазины, расположенными на проспекте Революции.
Для этого включим фильтр для столбцов от A до I:
Скопируем получившуюся таблицу на новый лист.
В столбце J будем считать количество килограммов во всех упаковках, для этого в ячейку J2 введем формулу =E2*I2/1000 и скопируем её до конца списка.
Получим таблицу:
Окончательно, воспользовавшись формулой =СУММ(J2:J17), определим общее количество (в килограммах) всех видов зефира, полученных магазинами, расположенными на проспекте Революции, со 2 по 10 августа. Всего 2550 килограммов.
Кодирование и декодирование информации. Передача информации. Выбор кода
i
По каналу связи передаются шифрованные сообщения, содержащие только десять букв: А, B, C, D, E, F, S, X, Y, Z. Для передачи используется неравномерный двоичный код. Для девяти букв используются кодовые слова.
Буква
Кодовое слово
A
00
B
C
010
D
011
E
1011
Буква
Кодовое слово
F
1001
S
1100
X
1010
Y
1101
Z
111
Укажите кратчайшее кодовое слово для буквы B, при котором код будет удовлетворять условию Фано. Если таких кодов несколько, укажите код с наименьшим числовым значением
Примечание. Условие Фано означает, что никакое кодовое слово не является началом другого кодового слова. Это обеспечивает возможность однозначной расшифровки закодированных сообщений.
Решение. Перечислим возможные коды (не использующиеся для кодировки других букв) в порядке возрастания длины и числового значения.
0 — нельзя, А, C и D начинаются с 0.
1 — нельзя, E, F, S, X, Y и Z начинаются с 1.
00 — нельзя из-за A.
01 — нельзя из-за C и D.
10 — нельзя из-за E, F и X.
11 — нельзя из-за S, Y и Z.
000 — нельзя из-за A.
001 — нельзя из-за A.
010 — нельзя из-за C.
011 — нельзя из-за D.
100 — нельзя, из-за F.
101 — нельзя из-за X.
110 — нельзя из-за Y.
111 — нельзя из-за Z.
0000 — нельзя из-за A.
0001 — нельзя из-за A.
0010 — нельзя из-за A.
0011 — нельзя из-за A.
0100 — нельзя из-за С и D.
0101 — нельзя из-за С и D.
0110 — нельзя из-за С и D.
0111 — нельзя из-за С и D.
1000 — можно использовать.
1001 — нельзя из-за E.
1010 — нельзя из-за X.
1011 — нельзя из-за E.
1100 — нельзя из-за S.
1101 — нельзя из-за Y.
1110 — нельзя из-за Z.
1111 — нельзя из-за Z.
Таким образом, наименьшее числовое значение у кодового слова 1000 для буквы B.
Анализ и построение алгоритмов для исполнителей.Посимвольное двоичное преобразование
i
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число чётное, то к двоичной записи числа слева дописывается 10;
б) если число нечётное, то к двоичной записи числа слева дописывается 1 и справа дописывается 01.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 410 = 1002 результатом будет являться число 2010 = 101002, а для исходного числа 510 = 1012 результатом будет являться число 1101012 = 5310.
Укажите максимальное число R, которое может быть результатом работы данного алгоритма, при условии, что N не больше 12. В ответе запишите это число в десятичной системе счисления.
Определение результатов работы простейших алгоритмов. Задания для подготовки
i
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится B начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 6 команд:Поднять хвост, означающая переход к перемещению 6eз рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n — целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m — целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. Запись Повтори k [Команда1 Команда2 ... КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Кодирование и декодирование информации. Передача информации. Хранение изображений. Передача изображений
i
Прибор автоматической фиксации нарушений правил дорожного движения делает цветные фотографии размером 1024×768 пикселей, используя палитру из 4096 цветов. Снимки сохраняются в памяти камеры, группируются в пакеты по несколько штук, а затем передаются в центр обработки информации со скоростью передачи данных 1 310 720 бит/с. Каково максимально возможное количество снимков в одном пакете, если на передачу одного пакета отводится не более 300 секунд? В ответе запишите целое число.
Решение. Один пиксель кодируется 12 битами, так как 212 = 4096. Всего 1024 · 768 = 786 432 пикселей. Значит, одна фотография занимает:
Перебор слов и системы счисления.Подсчет количества слов с ограничениями
i
Определите количество 12-ричных пятизначных чисел, в записи которых ровно одна цифра 7 и не более трёх цифр с числовым значением, превышающим 8.
Посчитаем количество пятизначных чисел с одной цифрой 7, а затем вычтем количество чисел с четырьмя цифрами большими 8
1) Если цифра 7 стоит на первом месте, то всего таких чисел 114, из них количество чисел с четырьмя цифрами большими 8 равно 34.
2) Если цифра 7 стоит не на первом месте, то всего пятизначных чисел 4*10*113 (т. к. на первом месте не может стоять 0), из них количество чисел c четырьмя цифрами большими 8 равно 34.
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для чисел которых выполнены оба условия:
— в строке только одно число повторяется трижды, остальные числа без повторений;
— квадрат суммы всех повторяющихся чисел строки больше квадрата суммы всех неповторяющихся чисел строки.
и скопируем эту формулу во все оставшиеся ячейки диапазона M2:M25000. Если в строке 3 повторяющихся числа и 3 различных,в ячейке М будет стоять 1, иначе будет стоять 0. Для проверки второго условия в ячейку N1 введем формулу:
=ЕСЛИ(G1=3;A1;"")
и скопируем эту формулу в ячейки диапазона N1:S25000. В данном диапазоне мы получим только повторяющиеся трижды числа.
В ячейку Т1 введем формулу:
=СУММ(N1:S1)
и скопируем эту формулу во все оставшиеся ячейки диапазона Т2:Т25000. В этом столбце будет сумма повторяющихся чисел.
В ячейку U1 введем формулу:
=СУММ(A1:F1)-T1
и скопируем эту формулу во все оставшиеся ячейки диапазона U2:U25000. В этом столбце будет сумма неповторяющихся чисел. (Заметим, что для строк без повторяющихся чисел эта формула не будет правильно работать, но такие строки не подходят по первому условию.) Проверим строки, подходящие под оба условия. Для этого в ячейку V1 введем формулу:
=ЕСЛИ(И(M1=1;T1*T1>U1*U1);1;0)
и скопируем эту формулу во все оставшиеся ячейки диапазона V2:V25000. Окончательно воспользовавшись формулой:
=СУММ(V:V),
получим ответ — 273.
Ответ: 273.
Приведём решение Михаила Глинского на языке Python.
Поиск символов в текстовом редакторе. Задания для подготовки
i
C помощью текстового редактора определите, сколько раз встречается сочетание букв «по» или «По» в составе других слов, включая сложные слова, соединённые дефисом, но не как отдельное слово в тексте глав XII и XIV третьей части тома 2 романа Л. Н. Толстого «Война и мир».
Решение. Скопируем текст глав XII и XIV третьей части тома 2 романа Л. Н. Толстого «Война и мир» в отдельный документ.
Воспользовавшись средствами поиска текстового редактора, введем слово «По» и получим результат — 112.
Перейдем в режим расширенного поиска и отметим пункт «Только слово целиком». Получим результат — 10. Среди этих результатов будет слово «по-гречески», которое не учитываем по условиям поиска.
Всего 112 - 10 + 1 = 103 раз встречается сочетание букв «по» или «По» в составе других слов, включая сложные слова, соединённые дефисом, но не как отдельное слово в тексте глав XII и XIV третьей части тома 2 романа Л. Н. Толстого «Война и мир».
На предприятии каждой изготовленной детали присваивают серийный номер, содержащий десятичные цифры, 52 латинские буквы (с учётом регистра) и символы из 963-символьного специального алфавита. В базе данных для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 2000 серийных номеров отведено не более 693 Кбайт памяти. Определите максимально возможную длину серийного номера. В ответе запишите только целое число.
Решение. Заметим, что k бит позволяют кодировать 2k символов.
Для кодирования серийного номера, использующей десятичные цифры, 52 латинские буквы (с учётом регистра) и символы из 963-символьного специального алфавита, требуется 11 бит (ведь 211 = 2048 ).
Для хранения серийного номера требуется
Для хранения номеров потребовалось:
Так как для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт:
Максимальная возможная длина серийного номера 257.
Ответ: 257.
Приведём решение Юрия Красильникова на языке Python.
m = 10+52+963 # мощность алфавита
k = 1
while 2**k < m: k += 1 # количество бит в коде символа
for l in range(10000,1,-1): # l - длина серийного номера
bits = l*k # сколько бит в серийном номере
bytes = bits//8
if bits%8 != 0: bytes += 1 # сколько байтов в серийном номере
if bytes*2000 <= 693*1024: # если 2000 серийных номеров помещаются в 693К
Выполнение алгоритмов для исполнителей. Исполнитель Редактор
i
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки vна цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 81 идущих подряд цифр 1? В ответе запишите полученную строку.
Организация компьютерных сетей. Адресация. Подсчет количества адресов в сети
i
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 172.16.168.0 и маской сети 255.255.248.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 5?
В ответе укажите только число
Решение. Выпишем адрес сети и маску в двоичной системе счисления:
Посчитаем количество вариантов, для которых количество единиц в двоичной записи IP-адреса не кратно 5, учтя то, что в известной части адреса восемь единиц.
Приведём программу на языке Python.
import itertools
count = 0
s = itertools.product([0,1],repeat = 11)
for i in s:
if (8 + sum(i))%5 !=0:
count += 1
print(count)
Приведём другое решение на языке Python.
from ipaddress import *
net = ip_network(f'172.16.168.0/255.255.248.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('1') % 5 != 0:
cnt += 1
print(cnt)
Ответ: 1663.
Приведём решение Михаила Глинского на языке Python.
count = 0
for x in range(2**11):
s = bin(x)[2:]
if (8 + s.count('1'))%5 != 0:
count += 1
print(count)
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network
net = ip_network('172.16.168.0/255.255.248.0',0)
print(sum(bin(int(ip)).count('1')%5!=0 for ip in net))
Приведём решение Александра Козлова на языке Python.
print(sum(1 for i in range(2**11) if (8+bin(i).count('1')) % 5 != 0))
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
var net:=new CalcIP('172.16.168.0','255.255.248.0');
Кодирование чисел. Системы счисления. Прямое сложение в СС
i
Операнды арифметического выражения записаны в системе счисления с основанием 19:
98897x2119 + 2x92319.
В записи чисел переменной x обозначена неизвестная цифра из алфавита 19-ричной системы счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 18. Для найденного значения x вычислите частное от деления значения арифметического выражения на 18 и укажите его в ответе в десятичной системе счисления. Основание системы счисления в ответе указывать не нужно.
На числовой прямой даны два отрезка: P = [15; 40] и Q = [21; 63]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
P → ((Q ∧ ¬A) → ¬P) = ¬P ∨ (¬(Q ∨ ¬A) ∨ ¬P) =¬P ∨ ¬Q ∨ A ∨ ¬P = ¬P ∨ ¬Q ∨ A
Данное выражение будет истинно на отрезках ¬P [-∞; 15] и [40; +∞] и ¬Q [-∞; 21] и [63; +∞]
В таком случае, для того, чтобы выражение было истинно при любом x,A должно лежать в промежутке (21; 40). Следовательно, наименьшая возможная длина промежутка равна 40 − 21 = 19.
Ответ: 19.
Приведём решение Сергея Корчажкина на языке Python.
p = list(range(15,41))
q = list(range(21,64))
mn = 100
for b in range(15,64):
for e in range(15, 64):
a = list(range(b,e+1))
if all([(x in p) <=(((x in q) and (x not in a)) <= (x not in p)) for x in range(1,100)]):
Обработки числовой последовательности. Задания для подготовки
i
В файле содержится последовательность натуральных чисел. Её элементы могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых остаток от деления хотя бы одного из элементов на 16 равен минимальному элементу последовательности. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю.
Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может.
Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута Робота.
В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. При разных запусках итоговые накопленные суммы могут различаться.
Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную.
Исходные данные представляют собой электронную таблицу размером N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.
Пример входных данных:
1
8
8
4
10
1
1
3
1
3
12
2
2
3
5
6
Ответ:
Решение. Сначала найдём максимальную денежную сумму. Для этого найдём максимальную денежную сумму для каждой ячейки таблицы. Для каждой ячейки верхней строки это будет сумма всех ячеек слева от текущей. Для каждой ячейки левого столбца это будет сумма всех ячеек сверху от текущей. В ячейку A22 запишем формулу =СУММ($A$1:A1). Скопируем эту формулу во все ячейки в диапазоне B22:T22 и в диапазоне A23:A41. Для ячеек E7:E9, F12:F18, K4:K8, K14:K17, S3:S5, S10:S18, поскольку слева от них имеется внутренняя стенка, максимальная денежная сумма вычисляется как сумма текущей ячейки и суммы сверху. Для ячеек B31:D31, D40:E40, G25:J25, G35:J35, O27:R27, L40:R40 поскольку сверху от них имеется внутренняя стенка, максимальная денежная сумма вычисляется как сумма текущей ячейки и суммы слева. Для остальных ячеек будем сравнивать значение ячейки слева и значение ячейки сверху и присваивать текущей ячейке значение суммы той ячейки, в которой значение больше, и текущей ячейки. В B23 запишем формулу =МАКС(A23+B2;B22+B2) и скопируем эту формулу во все оставшиеся ячейки диапазона B23:T41. Записав формулу =МАКС(D30;E39;R39;R26;T41) получим значение максимальной денежной суммы — 2671. Аналогичным образом найдём значение минимальной денежной суммы. Ячейки с внутренними стенками слева или сверху заполняются так же, как при поиске максимальной денежной суммы. В B23 запишем формулу =МИН(A23+B2;B22+B2) и скопируем эту формулу во все оставшиеся ячейки диапазона B23:T41. Записав формулу =МИН(D30;E39;R39;R26;T41), получим значение минимальной денежной суммы — 419.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи два камня или убрать из кучи пять камней или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).
Например, из кучи в 20 камней за один ход можно получить кучу из 18, 15 или 6 камней.
Игра завершается, когда количество камней в куче становится не более 19.
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 19 или меньше камней. В начальный момент в куче было S камней, S ≥ 20.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
Решение. Минимальное значение: S = 60. Петя может получить позиции 58, 55 или 20, в которых Ваня может выиграть уменьшив количество камней в куче в три раза. При меньших значениях S выигрывает Петя первым ходом.
Ответ: 60.
Приведём другое решение на языке Python.
def f(x, h):
if h == 3 and x <= 19:
return 1
elif h == 3 and x > 19:
return 0
elif x <= 19:
return 0
else:
if h % 2 == 0:
return f(x - 2, h + 1) or f(x - 5, h + 1) or f(x // 3, h + 1) # стратегия победителя
else:
return f(x - 2, h + 1) and f(x - 5, h + 1) and f(x // 3, h + 1) # стратегия проигравшего(неудачный ход)
Для игры, описанной в задании 19, найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
— Петя не может выиграть за один ход;
— Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.
Ответ:
Решение. Возможные значения S: 62, 63. В этих случаях Петя, очевидно, не может выиграть первым ходом. Однако он может получить кучи из 60 или 61 камней. Тогда после первого хода Вани в куче может быть 58, 59, 55, 56 или 20 камней. Во всех случаях Петя уменьшает количество камней в куче в три раза и выигрывает вторым ходом.
Таким образом, ответ — 62 63.
Ответ: 62 63.
Приведём другое решение на языке Python.
def f(x, h):
if h == 4 and x <= 19:
return 1
elif h == 4 and x > 19:
return 0
elif x <= 19:
return 0
else:
if h % 2 == 0:
return f(x - 2, h + 1) and f(x - 5, h + 1) and f(x // 3, h + 1) # стратегия победителя
else:
return f(x - 2, h + 1) or f(x - 5, h + 1) or f(x // 3, h + 1) # стратегия проигравшего(неудачный ход)
Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Решение. Минимальное значение S: 64. После первого хода Пети в куче будет 62, 59 или 21 камень. Если в куче станет 59 или 21 камней, Ваня уменьшит количество камней в куче в три раза и выиграет первым ходом. Когда в куче 62 камня, можно получить кучу из 60 камней. Тогда после второго хода Пети в куче будет 58 камней, или 55 камней, или 20 камней. Во всех случаях Ваня уменьшит количество камней в куче в три раза и выигрывает вторым ходом.
Таким образом, ответ — 64.
Ответ: 64.
Приведём другое решение на языке Python.
def f(x, h):
if (h == 3 or h == 5) and x <= 19:
return 1
elif h == 5 and x > 19:
return 0
elif x <= 19:
return 0
else:
if h % 2 == 0:
return f(x - 2, h + 1) or f(x - 5, h + 1) or f(x // 3, h + 1)
else:
return f(x - 2, h + 1) and f(x - 5, h + 1) and f(x // 3, h + 1)
def f1(x, h):
if h == 3 and x <= 19:
return 1
elif h == 3 and x > 19:
return 0
elif x <= 19:
return 0
else:
if h % 2 == 0:
return f1(x - 2, h + 1) or f1(x - 5, h + 1) or f1(x // 3, h + 1)
else:
return f1(x - 2, h + 1) and f1(x - 5, h + 1) and f1(x // 3, h + 1)
В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы могут выполняться только последовательно.
Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID), во втором столбце таблицы — время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение 0.
Типовой пример организации данных в файле:
ID процесса B
Время выполнения процесса B (мс)
ID процесса(ов) A
101
4
0
102
3
0
103
1
101; 102
104
7
103
Определите максимальную продолжительность отрезка времени (в мс), в течение которого возможно одновременное выполнение максимального количества процессов при условии, что все независимые друг от друга процессы могут выполняться параллельно и время окончания работы всех процессов минимально.
Выполните задания, используя данные из файла ниже:
Решение. Отсортируем данные в таблице так, чтобы все независимые процессы оказались в начале таблицы и любой процесс был расположен после всех процессов, от которых он зависит. Также в таблицу добавим столбец «Время окончания процесса» и запишем туда длительности независимых процессов.
Далее рассчитаем время выполнения оставшихся процессов:
Заметим, что время окончания работы всех процессов минимально, это означает, что процессы нельзя двигать.
Максимальная продолжительность отрезка времени (в мс), в течение которого возможно одновременное выполнение максимального количества процессов при условии, что все независимые друг от друга процессы могут выполняться параллельно и время окончания работы всех процессов минимальноравна 5.
Оператор присваивания и ветвления. Перебор вариантов, построение дерева. Количество программ с обязательным этапом
i
Исполнитель преобразует число на экране. У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 2.
B. Найди целую часть от деления на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 38 результатом является число 2 и при этом траектория вычислений содержит число 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.
Обработка символьных строк. Задания для подготовки
i
Текстовый файл состоит из цифр 0, 6, 7, 8, 9 и знаков арифметических операций «−» и «*» (вычитание и умножение). Определите максимальное количество символов в непрерывной последовательности, которая является корректным арифметическим выражением с целыми неотрицательными числами. В этом выражении никакие два знака арифметических операций не стоят рядом, в записи чисел отсутствуют незначащие (ведущие) нули и число 0 не имеет знака.
Пусть M — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 800 000, в порядке возрастания и ищет среди них такие, для которых M оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце — соответствующие им значения M.
Например, для числа 20 М = 2 + 10 = 12.
Количество строк в таблице для ответа избыточно.
Ответ:
ИЛИ
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 3?12?14*5, делящиеся на 1917 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 1917.
Количество строк в таблице для ответа избыточно.
Ответ:
Решение. Приведём решение на языке Python.
def deliteli(n):
deliteli = []
for i in range(2, int(n**0.5)+1):
if n % i == 0:
deliteli.append(i)
deliteli.append(n//i)
return deliteli
count = 0
for j in range(800_000, 10**6):
d = deliteli(j)
if len(d) != 0:
M = max(d) + min(d)
if M % 10 == 4:
print(j, M)
count += 1
if count == 5:
break
Ответ:
800004 400004
800009 114294
800013 266674
800024 400014
800033 61554
Приведём решение Александра Козлова на языке Python.
def get_M(n):
mi = ma = None
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
if mi is None: mi = i
if ma is None or (n // i) > ma: ma = n // i
return 0 if mi is None else mi + ma
results = []
for n in range(800_001, 1_000_000):
M = get_M(n)
if M % 10 == 4:
results.append((n, M))
if len(results) == 5: break
for num, M in results:
print(f"{num}\t{M}")
ИЛИ
Будем последовательно рассматривать каждое целое число, кратное 1917, затем каждое число проверять на соответствие маске.
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**10, 1917):
# Перебираем все числа от 0 с шагом 1917, будут получены числа кратные 1917
if fnmatch(str(x), '3?12?14*5'):
# Проверяем полученное число соответствию заданию
print(x, x//1917)
В результате работы программа должна вывести следующее:
351261495 183235
3212614035 1675855
3412614645 1780185
3712414275 1936575
3912414885 2040905
Приведём решение Юрия Красильникова на языке Python.
from itertools import product
d='0123456789'
twod=[''.join(x) for dl in range(3) for x in product(d,repeat=dl)]
a=sorted([int(f'3{x}12{y}14{z}5') for x in d for y in d for z in twod])
for y in [x for x in a if x%1917==0]: print(y,y//1917)
Обработка целочисленной информации. Задания для подготовки
i
Во время сессии студенты сдают 4 экзамена, за каждый из которых можно получить от 2 до 5 баллов. Студенты, получившие хотя бы одну «двойку», считаются не сдавшими сессию. Результаты сессии публикуются в виде рейтингового списка, в котором сначала указаны идентификационные номера студентов (ID), сдавших сессию, в порядке убывания среднего балла за сессию, а в случае равенства средних баллов – в порядке возрастания ID.
Затем располагаются ID студентов, не сдавших сессию: сначала — получивших одну «двойку», затем — две «двойки», потом ID студентов с тремя «двойками» и, наконец, ID студентов, получивших по 2 балла за каждый из экзаменов. Если студенты имеют одинаковое количество «двоек», то их ID в рейтинге располагаются в порядке возрастания.
Повышенную стипендию получают студенты, занявшие в рейтинговом списке первые 25% мест, при условии отсутствия у них «двоек».
Гарантируется, что без «двоек» сессию сдали не менее 25% студентов.
Найдите ID студента, который занимает последнее место среди студентов с повышенной стипендией, а также ID первого в рейтинговом списке студента, который имеет более двух «двоек».
В ответе запишите два целых положительных числа: сначала ID студента, который занимает последнее место среди студентов с повышенной стипендией, затем ID первого в рейтинговом списке студента, который имеет более двух «двоек».
В первой строке входного файла находится число N, обозначающее количество студентов (целое положительное число, не превышающее 10 000). Каждая из следующих N строк содержит 5 чисел через пробел: ID студента (целое положительное число, не превышающее 100 000) и четыре оценки, полученные им за сессию. Гарантируется, что общее число студентов N кратно 4 и хотя бы один студент имеет более двух «двоек».
Во входном файле все ID различны.
Выходные данные.
Два натуральных числа: искомые ID студентов в порядке, указанном в условии задачи.
Типовой пример организации данных во входном файле:
8
4 4 4 4 4
7 5 5 5 2
10 3 4 4 5
1 4 4 4 3
6 3 5 5 3
2 2 2 2 2
13 2 2 2 3
3 3 3 3 3
При таких исходных данных рейтинговый список ID имеет вид: 4 6 10 1 3 7 13 2. Ответ: 6 13.
Ответ:
Решение. Откроем текстовый документ с помощью редактора электронных таблиц. Запомним количество студентов и удалим первую строку.
В столбце F будем считать средний балл студентов. В ячейку F1 запишем формулу =СРЗНАЧ(B2:E2) и скопируем её до конца списка. В столбце G будем считать количество двоек. В ячейку G1 запишем формулу =СЧЁТЕСЛИ(B2:E2;2) и скопируем её до конца списка.
Получим следующую таблицу:
Выберем столбцы от A до G и воспользуемся настраиваемой сортировкой.
Выберем последовательно сортировку по возрастанию количества двоек, сортировку по убыванию среднего балла и по убыванию ID студентов.
Так как всего студентов 9964. то 25 % от количества студентов это 2491. Выпишем ID студента в ячейке A2491. ID студента, который занимает последнее место среди студентов с повышенной стипендией 52326. Это ответ на первый вопрос.
Так как студенты с двойками не сортируются по среднему баллу, уберем уровень сортировки по среднему баллу.
Включим фильтр по столбцу G и выберем только студентов с количеством двоек больше 2.
Получим следующую таблицу:
ID первого в рейтинговом списке студента, который имеет более двух «двоек» 635.
Ответ: 52326 635.
Приведём решение Юрия Красильникова на языке Python.
Учёный решил провести кластеризацию некоторого множества звёзд по их расположению на карте звёздного неба. Кластер звёзд — это набор звёзд (точек) на графике, лежащий внутри прямоугольника высотой H и шириной W. Каждая звезда обязательно принадлежит только одному из кластеров.
Истинный центр кластера, или центроид, — это одна из звёзд на графике, сумма расстояний от которой до всех остальных звёзд кластера минимальна. Под расстоянием понимается расстояние Евклида между двумя точками A(x1, y1) и B(x2, y2) на плоскости, которое вычисляется по формуле:
В файле A хранятся данные о звёздах двух кластеров, где H = 3, W = 3 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y. Значения даны в условных единицах. Известно, что количество звёзд не превышает 1000.
В файле Б хранятся данные о звёздах трёх кластеров, где H = 3, W = 3 для каждого кластера. Известно, что количество звёзд не превышает 10 000.
Структура хранения информации о звездах в файле Б аналогична файлу А.
Для каждого файла определите координаты центра каждого кластера, затем вычислите два числа: Px — среднее арифметическое абсцисс центров кластеров, и Py — среднее арифметическое ординат центров кластеров.
В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000 , затем целую часть произведения Py × 10 000 для файла А, во второй строке — аналогичные данные для файла Б.
Возможные данные одного из файлов иллюстрированы графиком.
Ответ:
Решение. Приведём решение на языке Python.
f = open('demo_2025.txt')
f.readline()
ans = []
min_summ = 10**10
stars = [list(map(float, s.replace(',','.').split())) for s in f]