Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Задание 23 (высокого уровня сложности). Задание высокого уровня сложности, проверяющее умение строить и преобразовывать логические выражения. С заданием справилось 20,5%, что на 13,39% выше, чем в прошлом году.
Пример. Сколько различных решений имеет система логических уравнений
(x1 ∧ y1) ≡ (¬x2 ∨ ¬y2)
(x2 ∧ y2) ≡ (¬x3 ∨ ¬y3)
...
(x5 ∧ y5) ≡ (¬x6 ∨ ¬y6),
где x1, …, x6, y1, …, y6, – логические переменные? В ответе не нужно перечислять все различные наборы значений переменных, при которых выполнено данное равенство. В качестве ответа нужно указать количество таких наборов.
Решение (метод битовых цепочек):
перепишем уравнения в более понятном виде:
.
.
,
которая может быть записана в виде

и сворачивается в одно уравнение
.
Решение (оптимизированный метод отображений):
Z1 | Z2 | Z3 | Z4 |
0 | 0 | 0 | 0 |
1 | |||
1 | 0 | ||
1 | |||
1 | 0 | 0 | |
1 | |||
1 | 0 | ||
1 | |||
1 | 0 | 0 | 0 |
1 | |||
1 | 0 | ||
1 | |||
1 | 0 | 0 | |
1 | |||
1 | 0 | ||
1 |

Заполняем таблицу, вычисляя количество пар переменных, при котором система имеет решение.
Z1Z2 | Z3Z4 | Z5Z6 | Z7Z8 | Z9Z10 | Z11Z12 | |
00 | 1 | 1 | 3 | 3 | 9 | 9 |
01 | 1 | 1 | 3 | 3 | 9 | 9 |
10 | 1 | 1 | 3 | 3 | 9 | 9 |
11 | 1 | 3 | 3 | 9 | 9 | 27 |
Складываем все результаты: 9 + 9 + 9 + 27 = 54. Ответ: 54.
Для успешного выполнения этого задания участник должен провести фактически мини-исследование системы логических выражений. Это оказалось под силу только 20% учащихся.
Задание 24 (повышенный уровень). Справилось 59,4% выпускников, что на 12,48% больше чем в 2017 году. Выпускники 2018 года: не указали, что выдает программа при конкретной входной последовательности и последовательность, при которой программа работает правильно; не увидели первую ошибку или исправили ее неправильно, не исправили вторую ошибку; не поняли условие задачи.
Пример. На вход программы поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество делящихся нацело на 4 чисел в исходной последовательности и максимальное делящееся нацело на 4 число. Если делящихся нацело на 4 чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно.
Pascal | Python |
const n = 4; var i, x: integer; var maximum, count: integer; begin count := 0; maximum := 1000; for i := 1 to n do begin read(x); if x mod 4 = 0 then begin count := count + 1; if x < maximum then maximum := x end end; if count > 0 then begin writeln(count); writeln(maximum) end else writeln('NO') end. | n = 4 count = 0 maximum = 1000 for i in range (1, n+1): x = int(input()) if x % 4 == 0: count += 1 if x < maximum: maximum = x if count > 0: print (count) print (maximum) else: print ("NO") |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе последовательности: 2 8 4 3.
2. Приведите пример такой последовательности, содержащей хотя бы одно делящееся нацело на 4 число, что при её вводе приведённая программа, несмотря на ошибки, выведет правильный ответ.
3. Найдите допущенные программистом ошибки и исправьте их.
Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно.
Решение:
Сначала выполним первое задание. Ручная прокрутка программы для входной последовательности 2 8 4 3 даёт count=2 и maximum=4. Пишем ответ:
1) При вводе чисел 2 8 4 3 программа выведет числа 2 и 4.
Это значит, что количество чисел, делящихся на 4, программа подсчитала правильно (два числа – 8 и 4), а максимальное определила неправильно (4 вместо 8).
При изучении программы вызывает вопросы поиск максимального значения:
maximum := 1000;
for i := 1 to n do begin
...
if x < maximum then
maximum := x
end
end;
Программа фактически ищет не максимальное, а минимальное число, делящееся на 4. Этот вывод совпадает с результатом, которые мы получили в п. 1. Отсюда сразу следует ответ на второй вопрос – программа выведет правильный ответ, если число, делящееся на 4 – всего одно, или есть несколько таких равных чисел.
2) Программа выведет правильный ответ (числа 1 и 4) при вводе чисел 2 1 4 3.
Поняв причину проблемы, легко исправить программу. Начальное значение переменной maximum должно быть равно 0 (или меньше), так чтобы оно было не больше любого подходящего числа (неотрицательного, делящегося на 4). Кроме того, нужно изменить знак в условии, вместо знака «меньше» использовать «больше»:
3) в программе нужно исправить две ошибки
Неверное начальное значение переменной maximum:
Было: maximum:= 1000;
Исправление: maximum:= 0;
Неверное условие при поиске максимума:
Было: if x < maximum then.
Исправление: if x > maximum then.
Задание 25 (высокий уровень). Задание высокого уровня сложности на обработку массива. Справилось 40,9% выпускников, что на 0,33% ниже по сравнению с 2017 годом. Типичные ошибки выпускников: отсутствует в явном виде инициализация счетчиков или сумматора найденных элементов массива, отсутствие фрагмента программы или ее запись с синтаксическими ошибками; не понимание условия задачи; отсутствие описания вводимых элементов в программу.
Пример. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит самую большую сумму двух соседних элементов и заменяет на эту сумму все элементы, кратные 3. Гарантируется, что в массиве есть хотя бы один элемент, кратный 3. В качестве результата необходимо вывести измененный массив в обратном порядке, каждый элемент массива выводится с новой строчки. Например, для массива из восьми элементов
1 2 6 3 2 7 3 4 программа должна вывести (по одному числу в строке) числа: 4 10 7 2 10 10 2 1.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


